時間是最好的解藥_
Promise的回調函數屬于異步任務,會在同步任務之後執行
new Promise(function (resolve, reject) {
resolve(1);
}).then(console.log);
console.log(2);
// 2
// 1
複制
但是,Promise的回調函數不是正常的異步任務,而是微任務(microtesk)。他們的差別在于,正常任務追加到下一個事件循環,微任務追加到本輪時間循環。這意味着,微任務的執行時間一定早于正常任務。
setTimeout(function() {
console.log(1);
}, 0);
new Promise(function (resolve, reject) {
resolve(2);
}).then(console.log);
console.log(3);
// 3
// 2
// 1
複制
上面代碼的輸出結果是321。這說明then回調的執行時間早于setTimeout(fn, 0)。因為then是本輪事件循環,setTimeout(fn,0)在下一輪時間循環開始時執行。
參考文獻:http://javascript.ruanyifeng.com/advanced/promise.html#toc9