for await...of 循环

e6b2089cef391e8c3a1cf3a501542b70.png

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 对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript 中,使用 `for..of` 或 `forEach` 循环来遍历一个数组或一个类数组对象时,是同步地进行的。如果在循环体内部调用了异步操作(例如调用接口),则会出现问题,因为循环不会等待异步操作完成,就直接执行下一次循环,导致结果不正确。 解决这个问题的方法是使用 `for await..of` 循环,它可以用于遍历支持异步迭代的对象,例如异步生成器和异步迭代器。使用 `for await..of` 循环可以确保在每次循环中等待异步操作完成后再执行下一次循环。 以下是使用 `for await..of` 循环调用接口的示例代码: ```javascript async function fetchData() { const urls = ['api/url1', 'api/url2', 'api/url3']; for await (const data of getData(urls)) { console.log(data); } } async function* getData(urls) { for (const url of urls) { const response = await fetch(url); const data = await response.json(); yield data; } } ``` 在上面的代码中,`fetchData` 函数调用了 `getData` 函数,并使用 `for await..of` 循环遍历异步生成器返回的数据。`getData` 函数接收一个 URL 数组,并使用 `for..of` 循环遍历 URL,调用 `fetch` 方法获取数据,然后使用 `yield` 关键字返回数据给异步生成器。在 `fetchData` 函数中,`for await..of` 循环等待异步生成器返回数据,并输出到控制台。这样就可以确保在每次循环中等待异步操作完成后再执行下一次循环,避免了使用 `forEach` 循环时出现的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值