郎朗坤
2022-07-15 09:22:51
編輯:請仔細閱讀。這確實有效。我試圖確切地理解為什么。編輯2:我知道異步使事情異步。為什么這不適用于 for...in 循環(huán)呢?我正在使用節(jié)點 v10.13.0。一段時間以來,我一直在 Javascript 中使用 for...of 循環(huán)在循環(huán)結(jié)構(gòu)中執(zhí)行異步任務。我毫不懷疑它按預期工作。我剛剛遇到了一種情況,我必須解釋為什么這是有效的,并意識到我實際上不知道。這是一個令人費解的示例,只是為了幫助可視化我的意思:async function myFunc(array) { for (var item of array) { await asyncRequest(); }}array在這個函數(shù)中,什么和是什么并不重要asyncRequest,關(guān)鍵是對于數(shù)組中的每個項目,程序執(zhí)行asyncRequest在經(jīng)過循環(huán)之前以看似順序的方式執(zhí)行每個項目。我查看了https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of,我發(fā)現(xiàn) for...of 循環(huán)遍歷可迭代對象。好吧,一個數(shù)組絕對是可迭代的,但這個事實似乎無關(guān)。對這種行為有任何見解嗎?
1 回答
幕布斯6054654
TA貢獻1876條經(jīng)驗 獲得超7個贊
asyncandawait機制是通過結(jié)合 Promises 和生成器函數(shù)來實現(xiàn)的。await函數(shù)內(nèi)部的每個async函數(shù)都類似于yield生成器中的 a。解析代碼時會處理代碼的轉(zhuǎn)換,因此您不必自己搞砸所有這些。
這意味著async函數(shù)內(nèi)部await可以出現(xiàn)在任何地方:如您所知,在for ... of循環(huán)內(nèi)部,但也可以在for ... in循環(huán)內(nèi)部,普通的舊for循環(huán),while循環(huán)等等。如果您閱讀了生成器函數(shù),您會發(fā)現(xiàn)它在某種意義上是完全平行的,yield可以出現(xiàn)在任何地方。因此,循環(huán)絕不是特殊的,并且(正如您所懷疑的)它們的行為和語義與這種循環(huán)體內(nèi)的含義for ... of無關(guān)。await
添加回答
舉報
0/150
提交
取消
