为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我可以在 for...of 循环中使用 await 关键字

为什么我可以在 for...of 循环中使用 await 关键字

郎朗坤 2022-07-15 09:22:51
编辑:请仔细阅读。这确实有效。我试图确切地理解为什么。编辑2:我知道异步使事情异步。为什么这不适用于 for...in 循环呢?我正在使用节点 v10.13.0。一段时间以来,我一直在 Javascript 中使用 for...of 循环在循环结构中执行异步任务。我毫不怀疑它按预期工作。我刚刚遇到了一种情况,我必须解释为什么这是有效的,并意识到我实际上不知道。这是一个令人费解的示例,只是为了帮助可视化我的意思:async function myFunc(array) {    for (var item of array) {        await asyncRequest();    }}array在这个函数中,什么和是什么并不重要asyncRequest,关键是对于数组中的每个项目,程序执行asyncRequest在经过循环之前以看似顺序的方式执行每个项目。我查看了https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of,我发现 for...of 循环遍历可迭代对象。好吧,一个数组绝对是可迭代的,但这个事实似乎无关。对这种行为有任何见解吗?
查看完整描述

1 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

asyncandawait机制是通过结合 Promises 和生成器函数来实现的。await函数内部的每个async函数都类似于yield生成器中的 a。解析代码时会处理代码的转换,因此您不必自己搞砸所有这些。

这意味着async函数内部await可以出现在任何地方:如您所知,在for ... of循环内部,但也可以在for ... in循环内部,普通的旧for循环,while循环等等。如果您阅读了生成器函数,您会发现它在某种意义上是完全平行的,yield可以出现在任何地方。因此,循环绝不是特殊的,并且(正如您所怀疑的)它们的行为和语义与这种循环体内的含义for ... of无关。await


查看完整回答
反对 回复 2022-07-15
  • 1 回答
  • 0 关注
  • 276 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号