2 回答

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