
catch和then和finally的用法
const p1= new Promise( (resolutionFunc,rejectionFunc) => {
1:resolutionFunc()
2:rejectionFunc()
3:console.long(a) 或者 throw 'a';
});
let p2 = p1.then()
let p3 = p1.then(v => { console.log(v) })
let p4 = p1.then(v => { return '444' })

1:new Promise里面寫resolutionFunc(),就會(huì)觸發(fā)p1.then(),第一個(gè)參數(shù),并執(zhí)行
2:new Promise里面寫rejectionFunc(),就會(huì)觸發(fā)p1.then(),第二個(gè)參數(shù),并執(zhí)行
3:new Promise里面寫錯(cuò)誤代碼,就會(huì)觸發(fā)p1.then(),第二個(gè)參數(shù),并執(zhí)行
4:若p1.then()的第二個(gè)參數(shù)沒有寫,那么就會(huì)觸發(fā).p1.catch(),并執(zhí)行
5:若p1.then()的第二參數(shù)和p1.then().catch()同時(shí)存在,出現(xiàn)異常,優(yōu)先選擇then里面的執(zhí)行
6:new Promise,除了里123這種類型,其他的不會(huì)觸發(fā)then,因?yàn)椴粫?huì)把pending狀態(tài)改變
7:p1.then()整體是什么狀態(tài),取決于上一個(gè)是什么狀態(tài)
8:.then整體的值是什么,【成功】
a:當(dāng)代碼里什么都沒有,return上一個(gè)的值,
b:當(dāng)代碼體寫了代碼,沒有寫return,那就是return undefined
c:當(dāng)代碼體寫了代碼,寫return,那就是return寫的那個(gè)值

9:.then整體的值是什么,【失敗】
a:當(dāng)代碼里什么都沒有,return上一個(gè)的值,
b:當(dāng)代碼體寫了代碼,沒有寫return,那就是上一個(gè)值
c:當(dāng)代碼體寫了代碼,寫return,那就是return寫的那個(gè)值

10:不管promise最后的狀態(tài),在執(zhí)行完then或catch指定的回調(diào)函數(shù)以后,都會(huì)執(zhí)行finally方法指定的回調(diào)函數(shù)。
tips:new promise必須把狀態(tài)改變,才能執(zhí)行下面的then代碼,而then雖然返回的也是實(shí)例,不需狀態(tài)改變,因?yàn)闀?huì)使用上一個(gè)的狀態(tài)