簡體   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