Promise?
什么是Promise?
ES6 異步編程的一種解決方案,比傳統(tǒng)的方案(回調(diào)函數(shù)和事件)更加的合理和強(qiáng)大
?好處 異步操作以同步操作的流程表達(dá)出來(lái)礁苗,避免了層層嵌套的回調(diào)函數(shù)
promise可以解決異步的問(wèn)題弟灼,本身不能說(shuō)promise是異步的
為什么會(huì)有promise
同步:主線程上排隊(duì)執(zhí)行的任務(wù)级解,只有前一個(gè)任務(wù)執(zhí)行完畢,才能繼續(xù)執(zhí)行下一個(gè)任務(wù)田绑;
異步:不進(jìn)入主線程勤哗,而進(jìn)入任務(wù)隊(duì)列的任務(wù),只有任務(wù)隊(duì)列通知主線程掩驱,某個(gè)異步任務(wù)可以執(zhí)行了芒划,該任務(wù)才會(huì)進(jìn)入主線程;
最常用的異步操作就是將回調(diào)函數(shù)作為異步回調(diào)的參數(shù)來(lái)使用欧穴,而promise是通過(guò)then來(lái)做的民逼;
new promise 的時(shí)候就會(huì)被立即執(zhí)行,因而為了實(shí)現(xiàn)用的時(shí)候調(diào)用所以將promise寫(xiě)在函數(shù)里面涮帘;
Promise的作用:
1拼苍,主要是用來(lái)解決回調(diào)嵌套(執(zhí)行完后再去執(zhí)行某一些操作,這時(shí)候容易形成嵌套再嵌套的問(wèn)題)的問(wèn)題调缨,也就是常見(jiàn)的"回調(diào)地獄"疮鲫;
?2苟鸯,執(zhí)行多并發(fā)請(qǐng)求獲取數(shù)據(jù);
Promise的使用:
1棚点,創(chuàng)建 Promise 實(shí)例早处,var p = new Promise();
2瘫析,實(shí)例創(chuàng)建以后可以用 .then 方法來(lái)指定 resolved狀態(tài) 和 reject狀態(tài) 的回調(diào)函數(shù)砌梆;
3,用常見(jiàn)的兩種異常機(jī)制來(lái)捕獲異常贬循;
Promise的基本語(yǔ)法
語(yǔ)法總結(jié):
1咸包、promise 的參數(shù)是一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)中有兩個(gè) 參數(shù)人別是resolve, reject resolve 用來(lái)返回異步請(qǐng)求成功的結(jié)果 reject 用來(lái)返回異步請(qǐng)求失敗的結(jié)果
2杖虾、promise 的對(duì)象將異步請(qǐng)求結(jié)果保存后烂瘫,需要使用第一個(gè) .then來(lái)獲取結(jié)果resolve函數(shù)返回的結(jié)果? .catch 獲取reject 返回的結(jié)果。當(dāng)然奇适,我們也可以在 第一個(gè).then中的第二個(gè) 回調(diào)函數(shù)獲得 reject 返回的結(jié)果(上述問(wèn)題可以查看代碼~ 我寫(xiě)注釋了)
3坟比、promise 還可意識(shí)用 第二個(gè).then是第一個(gè).then的回調(diào)函數(shù),這里可以繼續(xù)處理其他邏輯(個(gè)人感覺(jué)有些 馬后炮的意思嚷往,所以不經(jīng)常使用葛账,出現(xiàn)的概率也比較低)
Promise常用的方法:
實(shí)例方法
promise.then():獲取異步任務(wù)的正常結(jié)果。
promise.catch():獲取異步任務(wù)的異常結(jié)果皮仁。
promise.finaly():異步任務(wù)無(wú)論成功與否籍琳,都會(huì)執(zhí)行。
對(duì)象方法
promise.all (): 并發(fā)處理多個(gè)異步任務(wù)贷祈,所有任務(wù)都執(zhí)行成功趋急,才能得到結(jié)果,并控制他們返回的【結(jié)果的順序】
注意:promise.all中的 任何一個(gè)請(qǐng)求失敗势誊,將不會(huì)有返回結(jié)果呜达。
promise.race (): 并發(fā)處理多個(gè)異步任務(wù),只要有一個(gè)任務(wù)執(zhí)行成功键科,就能得到結(jié)果