for...of循环用于遍历同步的 Iterator 接口。新引入的for await...of循环,则是用于遍历异步的 Iterator 接口。
for await...of
循环是 JavaScript 中用于迭代异步可迭代对象的一种语法。它通常与异步生成器函数一起使用,用于处理异步操作的结果。在处理异步操作时,for await...of
循环可以按顺序处理每个异步操作的结果,而不需要手动管理 Promise 对象的解析和处理。
下面是一个简单的示例,演示了如何在异步生成器函数中使用 for await...of
循环:
async function* asyncGenerator() {
yield new Promise(resolve => setTimeout(() => resolve(1), 1000));
yield new Promise(resolve => setTimeout(() => resolve(2), 1000));
yield new Promise(resolve => setTimeout(() => resolve(3), 1000));
}
(async () => {
for await (const num of asyncGenerator()) {
console.log(num);
}
})();
在上面的示例中,asyncGenerator
是一个异步生成器函数,它返回一系列 Promise 对象。通过 for await...of
循环,我们可以依次处理每个 Promise 对象的解析结果,并将结果打印到控制台。
需要注意的是,for await...of
循环只能用于异步可迭代对象,而不是同步可迭代对象。异步可迭代对象是指实现了 Symbol.asyncIterator
方法的对象,它返回一个异步迭代器对象。
总的来说,for await...of
循环是处理异步操作时的一种便利语法,它简化了异步操作的处理流程,使代码更加清晰和易读。
异步 Generator 函数就像 Generator 函数返回一个同步遍历器对象一样,异步 Generator 函数的作用,是返回一个异步遍历器对象。
在语法上,异步 Generator 函数就是async函数与 Generator 函数的结合。
异步遍历器的设计目的之一,就是 Generator 函数处理同步操作和异步操作时,能够使用同一套接口。
异步 Generator 函数的返回值是一个异步 Iterator,即每次调用它的next方法,会返回一个 Promise 对象,也就是说,跟在yield命令后面的,应该是一个 Promise 对象。如果yield命令后面是一个字符串,会被自动包装成一个 Promise 对象。