當乙個promise進入settled狀態時,它後面的then**會被置入微任務佇列。
settle的時機,決定了**函式進入微佇列的時間,決定了執行順序。
**一:
new promise((resolve) => ,
}).then(() => console.log(2));
console.log(0);
}).then(() => console.log(3));
解析:從第三行開始
當promise.resolve()接收乙個thenable引數時,即刻產生了乙個promise1,並返回這個promise1,這個promise1被 settle的時機是thenable.then的resolve被呼叫時。
當promise.resolve()執行完成,將thenable.then放入微任務佇列,並返回乙個promise1,然後執行了console.log(0)
console.log(0)執行完成後,(resolve) => ,這個**塊執行結束,呼叫棧清空,同時返回了乙個promise0。
promise0立刻轉為settle狀態,致使() => console.log(3) 進入微任務佇列
thenable.then在微任務佇列彈出,執行console.log(1); resolve();
promise1 settle,導致() => console.log(2)進入微任務佇列;
此時,微任務佇列內還剩() => console.log(3)和() => console.log(2),根據入隊順序,依次被呼叫。
**二:
new promise((resolve) => ).then(() => console.log(4));
解析:依次執行
new promise(...
resolve();
promise.resolve().then(() => console.log(2)),此時promise.resolve產生了乙個promise1,並立即settle,導致console.log(2)進入微任務佇列
new promise(... 建構函式返回,生成了乙個promise2。promise2即刻settle,導致() => console.log(4)進入微任務佇列。
呼叫棧清空,開始依次執行微任務。
promise經典面試題
var urls 0 function loaddate url xhr.open get url xhr.send 按照題意我們可以這樣做,首先併發請求 3 個url中的資料,當其中一條url請求得到資料後,立即發起對一條新url上資料的請求,我們要始終讓併發數保持在 3 個,直到所有需要載入資料...
LeedCode經典題目
目錄 尋找陣列中心索引 至少是其他數字兩倍的最大數 加一 給定乙個整數型別的陣列 nums,請編寫乙個能夠返回陣列 中心索引 的方法。我們是這樣定義陣列中心索引的 陣列中心索引的左側所有元素相加的和等於右側所有元素相加的和。如果陣列不存在中心索引,那麼我們應該返回 1。如果陣列有多個中心索引,那麼我...
LoadRunner面試經典題目
1.什麼是負載測試?什麼是效能測試?2.效能測試包含了哪些測試 至少舉出3種 3.簡述效能測試的步驟 4.簡述使用 loadrunner 的步驟 5.什麼時候可以開始執行效能測試?6.loadrunner由哪些部件組成?7.你使用 loadrunner 的哪個部件來錄製指令碼?8.loadrunne...