![](/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.