javascript异步迭代器用于按需异步获取数据序列,其next()返回promise;async function*定义异步生成器,支持await和yield;for await...of自动消费异步迭代器,需在async函数中使用;可手动调用next()实现精细控制;自定义对象通过部署[symbol.asynciterator]支持异步迭代。

JavaScript 的异步迭代器(Async Iterator)用于按需、异步地获取数据序列,特别适合处理流式数据(如 Fetch 响应体、数据库游标、事件流等)。它和普通迭代器结构相似,但 next() 方法返回的是 Promise,而不是直接的 { value, done } 对象。
async function* 定义异步生成器
最常用的方式是用 async function* 声明异步生成器函数。它内部可使用 await,并用 yield 异步产出值。
- 每次调用生成器的
next()会返回Promise -
yield后面可以是 Promise,也会自动 await 并产出解析后的值 - 支持
return和throw,可用于提前结束或错误传递
示例:
async function* fetchLines(url) {
const res = await fetch(url);
const reader = res.body.getReader();
const decoder = new TextDecoder();
<p>while (true) {
const { done, value } = await reader.read();
if (done) break;
yield decoder.decode(value).trim();
}
}</p><p>// 使用
for await (const line of fetchLines('/log.txt')) {
console.log(line);
}</p>
for await...of 自动消费异步迭代器
for await...of 是专为异步迭代器设计的语法糖,会自动调用 next() 并等待每个 Promise 解析,直到 done: true。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 只能在
async函数内使用 - 遇到 rejected Promise 会抛出异常,可用
try/catch捕获 - 不支持数组或普通对象——它们不是异步可迭代的(除非显式实现
[Symbol.asyncIterator])
手动调用 next() 处理更精细的控制流
当需要逐次判断、中断、重试或并发拉取多个值时,可手动调用 next():
- 调用
iterator.next()返回 Promise,await后解构{ value, done } - 若
done为true,说明迭代结束,不应再调用next() - 可配合
Promise.race()实现超时控制,例如:await Promise.race([it.next(), timeout(5000)])
自定义对象实现 [Symbol.asyncIterator]
让任意对象支持 for await...of,只需在其原型或实例上部署 [Symbol.asyncIterator] 方法,返回一个符合规范的异步迭代器对象:
- 该方法必须返回一个对象,含
next()方法,且next()返回Promise - 常用于封装 WebSocket 消息流、定时轮询队列、或模拟异步数据源
示例(简易定时消息流):
class TickStream {
constructor(count = 3) {
this.count = count;
}
[Symbol.asyncIterator]() {
let i = 0;
return {
next: () => {
if (i >= this.count) return Promise.resolve({ value: undefined, done: true });
return new Promise(resolve => {
setTimeout(() => resolve({ value: `tick ${++i}`, done: false }), 1000);
});
}
};
}
}
<p>// 使用
(async () => {
for await (const msg of new TickStream(3)) {
console.log(msg); // tick 1 → tick 2 → tick 3
}
})();</p>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










