面试题答案
一键面试异步迭代器概念
异步迭代器是一种对象,它实现了 asyncIterator
接口,该接口包含一个 next()
方法,该方法返回一个 Promise
。每次调用 next()
方法时,这个 Promise
解决为一个对象,该对象具有 value
和 done
两个属性,value
是迭代器当前的值,done
是一个布尔值,表示迭代是否完成。这使得在异步操作(如读取文件、网络请求等)中进行迭代成为可能。
代码示例
// 创建一个异步生成器函数,它返回一个异步迭代器
async function* asyncGenerator() {
yield 1;
await new Promise(resolve => setTimeout(resolve, 1000));
yield 2;
await new Promise(resolve => setTimeout(resolve, 1000));
yield 3;
}
// 使用 for - await - of 循环迭代异步迭代器
async function main() {
for await (const value of asyncGenerator()) {
console.log(value);
}
}
main();
在上述代码中:
asyncGenerator
是一个异步生成器函数,它返回一个异步迭代器。- 异步生成器函数内部,
yield
暂停函数执行,await
等待Promise
解决。这里使用setTimeout
模拟异步操作。 main
函数中使用for - await - of
循环来迭代异步生成器返回的异步迭代器,每次迭代会等待前一个异步操作完成后才继续。