繁体   English   中英

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

[英]Why can I use await keyword inside a for...of loop

编辑:请仔细阅读。 确实有效。 我想弄清楚为什么。

编辑 2:我知道异步使事情变得异步。 为什么这对 for...in 循环不起作用?

我正在使用节点 v10.13.0。

一段时间以来,我一直在 Javascript 中使用 for...of 循环在循环结构内执行异步任务。 我毫不怀疑它按预期工作。

我刚遇到一种情况,我必须解释为什么这是有效的,并意识到我实际上不知道。 这是一个复杂的例子,只是为了帮助形象化我的意思:

async function myFunc(array) {
    for (var item of array) {
        await asyncRequest();
    }
}

在这个 function 中, arrayasyncRequest是什么并不重要,关键是对于数组中的每一项,程序执行在通过循环之前以看似连续的方式执行每个asyncRequest

我查看了https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of ,在那里我发现 for...of 循环迭代可迭代对象。 好吧,一个数组绝对是可迭代的,但这个事实似乎无关紧要。

对这种行为有任何见解吗?

asyncawait机制是通过将 Promises 与生成器函数相结合来实现的。 async function 中的每个await就像生成器中的yield 代码的转换是在解析代码时处理的,因此您不必自己搞砸所有这些。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM