An AsyncIterator
object is an object that conforms to the async iterator protocol by providing a next()
method that returns a promise fulfilling to an iterator result object. The AsyncIterator.prototype
object is a hidden global object that all built-in async iterators inherit from. It provides an @@asyncIterator
method that returns the async iterator object itself, making the async iterator also async iterable.
Note that AsyncIterator
is not a global object, although it will be in the future with the async iterator helpers proposal. The AsyncIterator.prototype
object shared by all built-in async iterators can be obtained with the following code:
const AsyncIteratorPrototype = Object.getPrototypeOf(
Object.getPrototypeOf(Object.getPrototypeOf((async function* () {})())),
);
Description
Currently, the only built-in JavaScript async iterator is the AsyncGenerator
object returned by async generator functions. There are some other built-in async iterators in web API, such as the one of a ReadableStream
.
Each of these async iterators have a distinct prototype object, which defines the next()
method used by the particular async iterator. All of these prototype objects inherit from AsyncIterator.prototype
, which provides am @@asyncIterator
method that returns the async iterator object itself, making the async iterator also async iterable.
Using an async iterator as an async iterable
All built-in async iterators are also async iterable, so you can use them in a for await...of
loop:
const asyncIterator = (async function* () {
yield 1;
yield 2;
yield 3;
})();
(async () => {
for await (const value of asyncIterator) {
console.log(value);
}
})();
Specifications
Browser compatibility
|
Desktop |
Mobile |
Server |
|
Chrome |
Edge |
Firefox |
Opera |
Safari |
Chrome Android |
Firefox for Android |
Opera Android |
Safari on IOS |
Samsung Internet |
WebView Android |
Deno |
Node.js |
@@asyncIterator |
63 |
79 |
57 |
50 |
11.1 |
63 |
57 |
46 |
11.3 |
8.0 |
63 |
1.0 |
10.0.0 |
AsyncIterator |
63 |
79 |
57 |
50 |
11.1 |
63 |
57 |
46 |
11.3 |
8.0 |
63 |
1.0 |
10.0.0 |