推荐答案
异步迭代器 (Async Iterator)
异步迭代器是一种特殊的迭代器,它允许在异步环境中逐步获取数据。与普通迭代器不同,异步迭代器的 next() 方法返回一个 Promise,该 Promise 解析为一个包含 value 和 done 属性的对象。异步迭代器通常用于处理异步数据流,例如从数据库或网络请求中逐步获取数据。
异步生成器 (Async Generator)
异步生成器是一种特殊的生成器函数,它使用 async function* 语法定义。异步生成器函数内部可以使用 await 关键字来等待异步操作完成,并且可以使用 yield 关键字来生成值。异步生成器返回一个异步迭代器,允许在异步环境中逐步生成和消费数据。
本题详细解读
异步迭代器 (Async Iterator)
异步迭代器的主要特点是其 next() 方法返回一个 Promise。这个 Promise 在解析后会返回一个对象,该对象包含两个属性:
value: 当前迭代的值。done: 一个布尔值,表示迭代是否已完成。
异步迭代器通常用于处理异步数据流,例如从数据库或网络请求中逐步获取数据。以下是一个简单的异步迭代器示例:
// www.javascriptcn.com code example
const asyncIterable = {
[Symbol.asyncIterator]() {
let i = 0;
return {
next() {
if (i < 3) {
return Promise.resolve({ value: i++, done: false });
}
return Promise.resolve({ done: true });
}
};
}
};
(async function() {
for await (let item of asyncIterable) {
console.log(item); // 输出: 0, 1, 2
}
})();异步生成器 (Async Generator)
异步生成器函数使用 async function* 语法定义。在异步生成器函数内部,可以使用 await 关键字来等待异步操作完成,并且可以使用 yield 关键字来生成值。异步生成器返回一个异步迭代器,允许在异步环境中逐步生成和消费数据。
以下是一个简单的异步生成器示例:
// www.javascriptcn.com code example
async function* asyncGenerator() {
let i = 0;
while (i < 3) {
await new Promise(resolve => setTimeout(resolve, 100)); // 模拟异步操作
yield i++;
}
}
(async function() {
for await (let item of asyncGenerator()) {
console.log(item); // 输出: 0, 1, 2
}
})();在这个示例中,asyncGenerator 是一个异步生成器函数,它每隔 100 毫秒生成一个值。通过 for await...of 循环,我们可以逐步消费这些生成的值。