js--->setTimeout和Promise的執行順序


setTimeout(function() {
console.log(1)
}, 0);
new Promise(function(resolve, reject) {
console.log(2)
for (var i = 0; i < 10000; i++) {
if(i === 10) {console.log(10)}
i == 9999 && resolve();
}
console.log(3)
}).then(function() {
console.log(4)
})
console.log(5);

輸出答案:2 10  3 5 4 1

  1. 要先弄清楚settimeout(fun,0)何時執行,promise何時執行,then何時執行
  2. settimeout這種異步操作的回調,只有主線程中沒有執行任何同步代碼的前提下,才會執行異步回調,而settimeout(fun,0)表示立刻執行,也就是用來改變任務的執行順序,要求瀏覽器盡可能快的進行回調
  3. promise何時執行,由上圖可知promise新建后立即執行,所以promise構造函數里代碼同步執行的,
  4. then方法指向的回調將在當前腳本所有同步任務執行完成后執行,
  5. 那么then為什么比settimeout執行的早呢,因為settimeout(fun,0)不是真的立即執行,
  6. 經過測試得出結論:執行順序為:同步執行的代碼-》promise.then->settimeout


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM