![](/img/trans.png)
[英]Can I use continue and break in Javascript for...in and for...of loops?
[英]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 中, array
和asyncRequest
是什么并不重要,关键是对于数组中的每一项,程序执行在通过循环之前以看似连续的方式执行每个asyncRequest
。
我查看了https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of ,在那里我发现 for...of 循环迭代可迭代对象。 好吧,一个数组绝对是可迭代的,但这个事实似乎无关紧要。
对这种行为有任何见解吗?
async
和await
机制是通过将 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.