簡體   English   中英

完成setTimout()代碼后同步執行代碼的簡單方法

[英]Simple way to synchronously execute code after setTimout() code is done

我需要一種簡單的方法來等待setTimeout代碼完成執行,然后運行setTimeout之后的代碼。 現在,包含setTimout的循環后代碼將在循環/ setTimout完成執行之前執行。

for(let i = 0; i < 5; i++) {
   setTimeout(function(){
    console.log(i);
  }, i*1000);
 }
console.log("loop/timeout is done executing");

setTimeout根據定義不是同步的-用於解決問題的任何方法必須是異步的,沒有辦法解決。

實現此類目標的最佳方法是改用Promise ,在創建的promise數組上調用Promise.all

 (async () => { await Promise.all(Array.from( { length: 5 }, (_, i) => new Promise(res => setTimeout(() => { console.log(i); res(); }, i * 1000)) )); console.log("loop/timeout is done executing"); })(); 

盡管await正在等待Promise,並且Promises不是同步的,但是如果您希望代碼看起來平坦,則可以使最終的console.log與主功能塊處於相同的縮進級別,這可能是走。

您可以定義一個函數並在超時內調用該函數

  let currentForId = 0; for(let i = 0; i < 5; i++) { setTimeout(function(){ console.log(i); if(++currentForId == 5) calling("message"); }, i*1000); } function calling(msg){ console.log(msg); console.log("loop/timeout is done executing"); } 

暫無
暫無

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

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