鍍金池/ 問答/PHP  HTML/ ES6 Promise問題

ES6 Promise問題

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í)行結果為:
b1 
a2 
c2 
b2

-------------------
為什么b1會在a2輸出之前輸出,c2會在b2輸出之前輸出

回答
編輯回答
綰青絲

相似的問題,最近剛答過

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

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

輸出的結果不對吧,應該是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í)行這三個
Promise.reject('a').then(()=>{
  console.log('a1')
})
Promise.reject('b').catch(()=>{
  console.log('b1')
})
Promise.reject('c').then(()=>{
  console.log('c1')
})
因為reject對應的是catch,所以先輸出 b1

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