最近在看Promise相關知識,遇到一個面試題,以我的理解,應該是先輸出a failed,然后b failed b passed的,可是為什么a failed在中間輸出了??
2 回答

jeck貓
TA貢獻1909條經驗 獲得超7個贊
強調:Promise
的每個then
或catch
都是異步執行的。
因此,實際上最先執行的是a.then
,但沒有定義catch
,所以拋出異常,然后異步交給后面的catch
處理(a failed
)。此時下一個等待執行的是b.catch
(b failed
),處理完之后,同樣異步交給后面的then
(b passed
)。接著,之前排隊的catch
(b failed
)執行,最后b passed
執行。
這就是各個then/catch
交替執行的原因。
整個過程類似于下面的代碼:
setTimeout(function(){
console.log(1);
setTimeout(function(){
console.log(2);
}, 0);
}, 0);
setTimeout(function(){
console.log(3);
setTimeout(function(){
console.log(4);
}, 0);
}, 0);
結果打印1 3 2 4
,而不是1 2 3 4
。
添加回答
舉報
0/150
提交
取消