鍍金池/ 問(wèn)答/PHP  HTML/ ES6 Promise問(wèn)題

ES6 Promise問(wèn)題

Promise.reject('a').then(()=>{
    console.log('a1')
}).catch(()=>{
    console.log('a2')
});

Promise.reject('b').catch(()=>{
    console.log('b1')
}).then(()=>{
    console.log('b2')
});

Promise.reject('c').then(()=>{
    console.log('c1')
}).catch(()=>{
    console.log('c2')
});

最終執(zhí)行結(jié)果為:
b1 
a2 
c2 
b2

-------------------
為什么b1會(huì)在a2輸出之前輸出,c2會(huì)在b2輸出之前輸出

回答
編輯回答
綰青絲

相似的問(wèn)題,最近剛答過(guò)

求解Promise的一道面試題 - 兩猿四腳的回答

2018年5月31日 14:27
編輯回答
孤巷

輸出的結(jié)果不對(duì)吧,應(yīng)該是b1,a2,b2,c2。

Promise.reject('a').then(()=>{
  console.log('a1')
}).catch(()=>{
  console.log('a2')
});

Promise.reject('b').catch(()=>{
  console.log('b1')
}).then(()=>{
  console.log('b2')
});

Promise.reject('c').then(()=>{
  console.log('c1')
}).catch(()=>{
  console.log('c2')
});

你可以看成第一階段 執(zhí)行這三個(gè)
Promise.reject('a').then(()=>{
  console.log('a1')
})
Promise.reject('b').catch(()=>{
  console.log('b1')
})
Promise.reject('c').then(()=>{
  console.log('c1')
})
因?yàn)閞eject對(duì)應(yīng)的是catch,所以先輸出 b1

第二階段是
.catch(()=>{
  console.log('a2')
})
.then(()=>{
  console.log('b2')
})
.catch(()=>{
  console.log('c2')
})
然后輸出 a2,b2,c2
2017年10月31日 20:37