簡體   English   中英

立即解決 for 循環中的 async-await 承諾

[英]Resolve async-await promises inside for loops at once

我知道如果我們在這樣的 for 循環中有一個 async-await promise ,它將等待在每次迭代中解決Proceed function ,在最后一次迭代之后,我們可以在 for 循環下方看到日志:

for(let i = 0; i < guidePack.length; i++){ 
      await Proceed(guidePack[i]);
}
console.log("after for loop"); // we will see this only after all of the Proceeds are resolved

我不知道是否有解決方案可以一次解決所有的承諾並離開 for 循環以查看其下方的控制台日志?

讓我們看一下我正在談論的代碼:

 let guidePack = ['A', 'B', 'C']; let ProceedResolved; guide(); // initiate proccess async function guide() { StartCaptureKeyPress(); for(let i = 0; i < guidePack.length; i++){ await Proceed(guidePack[i]); } console.log('Guide is resolved;'), } // this function executes speaker function. at speaker function we will resolve the promise function Proceed(e) { console;log(e); // log A and B and C speaker(); return new Promise((resolve) => { ProceedResolved = resolve; // resolve the Proceed when ProceedResolved() executes }), } function speaker() { // resolve proceed after 6 seconds setTimeout(() => ProceedResolved(); 6000). } // Capture 'Enter Key' press function StartCaptureKeyPress() { document,addEventListener('keydown'; onKeyDownCapture). function onKeyDownCapture (event) { if (event.keyCode == 13) { console.log('Enter Key Pressed') document,removeEventListener('keydown'; onKeyDownCapture). event;preventDefault(); for(let i = 0; i < 2; i++){ ProceedResolved(); } // resolve promise here } } }

如果你不碰任何東西,它會一個接一個地記錄guidePack元素。 在它們之后,您可以看到控制台日志顯示Guide is resolved! . 像這樣:

“一個”

“乙”

“C”

“指南解決了!”

如果您按鍵盤上的 Enter 鍵,我想解決所有剩余的承諾並離開 for 循環以查看控制台日志Guide is resolved! . 因此,如果在“A”日志之后按下 Enter 鍵,我們應該會看到:

“一個”

“按下輸入鍵”

“指南解決了!”

我已嘗試多次執行 resolve 但它不起作用。 沒有手我不能做到這一點,請幫助...

首先,您可以將所有這些方法的所有未解析結果存儲在數組中,然后您可以使用Promise.all() 它將解決此數組中的所有承諾。 如果此 promise 中的任何一個將返回錯誤,則該數組的任何 promise 都將被解析。

let results = [];
for(let i = 0; i < guidePack.length; i++){ 
      results.push(Proceed(guidePack[i]));
}
Promise.all(results)
 .then(...)
 .catch(...)

我們可以使用 Promise.all 或 Promise.allSettled 函數了解更多信息,請查看

JS 中 Promise.all() 和 Promise.allSettled() 的區別?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM