Javascript 为什么我可以在for…of循环中使用wait关键字
编辑:请仔细阅读。这确实有效。我正试图弄清楚原因 编辑2:我知道异步使事情变得异步。为什么这个循环不适用于for…in循环呢 我使用的是节点v10.13.0 一段时间以来,我一直在使用Javascript中的For…of循环在循环结构中执行异步任务。我毫不怀疑它正在按预期工作 我只是遇到了一个情况,我必须解释为什么这是工作,并意识到我其实不知道。下面是一个复杂的示例,旨在帮助您直观地理解我的意思:Javascript 为什么我可以在for…of循环中使用wait关键字,javascript,async-await,Javascript,Async Await,编辑:请仔细阅读。这确实有效。我正试图弄清楚原因 编辑2:我知道异步使事情变得异步。为什么这个循环不适用于for…in循环呢 我使用的是节点v10.13.0 一段时间以来,我一直在使用Javascript中的For…of循环在循环结构中执行异步任务。我毫不怀疑它正在按预期工作 我只是遇到了一个情况,我必须解释为什么这是工作,并意识到我其实不知道。下面是一个复杂的示例,旨在帮助您直观地理解我的意思: async function myFunc(array) { for (var item
async function myFunc(array) {
for (var item of array) {
await asyncRequest();
}
}
在这个函数中,array
和asyncRequest
是什么并不重要,关键是对于数组中的每个项目,程序执行在经过循环之前以一种看似连续的方式执行每个asyncRequest
我看了一下,我发现for…of循环在iterable对象上迭代。数组是绝对可写的,但这一事实似乎无关
了解这种行为吗?异步
和等待机制是通过将承诺与生成器函数相结合来实现的。async
函数中的每个wait
,就像生成器中的一个yield
。代码的转换是在解析代码时处理的,因此您不必自己处理这些
这意味着在async
函数中,await
可以出现在任何地方:如您所知,在函数中。。。循环的,但也在循环的内部,用于。。。在
loops中,对于
loops,而
loops,无论什么都可以。如果你仔细阅读生成器函数,你会发现在某种意义上,它是完全并行的,yield
可以出现在任何地方。所以,对于。。。of
循环毫无特殊之处,而且(正如您所怀疑的)它们的行为和语义与await
在这样一个循环体中的含义无关。这就是async
和await
被设计用来做的;换句话说,这种行为才是关键。我知道它是有效的。我只是不知道为什么。那为什么不去工作呢?为什么只是为了……的?为了。。。在
中也会起作用,就像一个普通的for
循环,或者一个while
循环,等等。我想我只是不清楚混淆的是什么——为什么你认为,for…in
不起作用?你也可以看看由再生器运行时生成的代码,看看异步等待的流程是什么样子。它是为不支持它的平台生成的异步等待。谢谢-这给了我下一步应该学习的方向。我很感激!