Symbol.asyncIterator
Symbol.asyncIterator 静态数据属性表示 内置符号 Symbol.asyncIterator。 异步迭代器协议 会查找此符号以获取返回对象异步迭代器的函数。为了使对象成为异步可迭代对象,它必须具有 [Symbol.asyncIterator] 键。
试一试
const delayedResponses = {
delays: [500, 1300, 3500],
wait(delay) {
return new Promise((resolve) => {
setTimeout(resolve, delay);
});
},
async *[Symbol.asyncIterator]() {
for (const delay of this.delays) {
await this.wait(delay);
yield `Delayed response for ${delay} milliseconds`;
}
},
};
(async () => {
for await (const response of delayedResponses) {
console.log(response);
}
})();
// Expected output: "Delayed response for 500 milliseconds"
// Expected output: "Delayed response for 1300 milliseconds"
// Expected output: "Delayed response for 3500 milliseconds"
值
内置符号 Symbol.asyncIterator。
Symbol.asyncIterator 的属性特性 | |
|---|---|
| 可写 | 否 |
| 可枚举 | 否 |
| 可配置 | 否 |
示例
用户定义的异步可迭代对象
您可以通过在对象上设置 [Symbol.asyncIterator]() 属性来定义自己的异步可迭代对象。
js
const myAsyncIterable = {
async *[Symbol.asyncIterator]() {
yield "hello";
yield "async";
yield "iteration!";
},
};
(async () => {
for await (const x of myAsyncIterable) {
console.log(x);
}
})();
// Logs:
// "hello"
// "async"
// "iteration!"
在创建 API 时,请记住异步可迭代对象旨在表示可迭代的内容——例如数据流或列表——而不是在大多数情况下完全取代回调和事件。
内置异步可迭代对象
核心 JavaScript 语言中没有异步可迭代对象。一些 Web API,例如 ReadableStream,默认情况下具有 Symbol.asyncIterator 方法。
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-symbol.asynciterator |
浏览器兼容性
加载中…