promise是什么:
JavaScript中存在很多異步操作, Promise將異步操作隊(duì)列化,按照期望的順序執(zhí)行,返回 符合預(yù)期的結(jié)果。可以通過(guò)鏈?zhǔn)秸{(diào)用多個(gè) Promise達(dá)到我們的目的。 Promise 在各種開(kāi)源庫(kù)中已經(jīng)實(shí)現(xiàn),現(xiàn)在標(biāo)準(zhǔn)化后被瀏覽器默認(rèn)支持。 Promise 是一個(gè)擁有then方法的對(duì)象或函數(shù)
為什么會(huì)有promise?
為了避免界面凍結(jié)(任務(wù)) 異步回調(diào)的問(wèn)題: 之前處理異步是通過(guò)純粹的回調(diào)函數(shù)的形式進(jìn)行處理 很容易進(jìn)入到回調(diào)地獄中,剝奪了函數(shù)return的能力 問(wèn)題可以解決,但是難以讀懂,維護(hù)困難 稍有不慎就會(huì)踏入回調(diào)地獄 - 嵌套層次深,不好維護(hù)
promise的優(yōu)點(diǎn) 并未剝奪函數(shù)return的能力,因此無(wú)需層層傳遞callback,進(jìn)行回調(diào)獲取數(shù)據(jù) 代碼風(fēng)格,容易理解,便于維護(hù) 多個(gè)異步等待合并便于解決 簡(jiǎn)化編程,讓代碼邏輯更加清晰。

Promise 可以理解為承諾,就像我們?nèi)FC 點(diǎn)餐服務(wù)員給我們?nèi)〔推保@就是承諾。如果 餐做好了叫我們這就是成功,如果沒(méi)有辦法給 我們做出食物這就是拒絕。
基礎(chǔ)知識(shí)點(diǎn)補(bǔ)充:
promise有三個(gè)狀態(tài):
1、pending[待定]初始狀態(tài)
2、fulfilled[實(shí)現(xiàn)]操作成功
3、rejected[被否決]操作失敗
當(dāng)promise狀態(tài)發(fā)生改變,就會(huì)觸發(fā)then()里的響應(yīng)函數(shù)處理后續(xù)步驟;一個(gè)Promise 只能成功或失敗一次,狀態(tài)無(wú)法改變且產(chǎn)生后不可逆. (成功和失敗同時(shí)存在時(shí)誰(shuí)在前誰(shuí)產(chǎn)生作用)
總結(jié): promise狀態(tài)是單向的,不可逆的,不可撤銷的
resolve作用是,將Promise對(duì)象的狀態(tài)從“未完成”變?yōu)椤俺晒Α?即從 pending 變?yōu)?nbsp;resolved) 在異步操作成功時(shí)調(diào)用,并將異步操作的結(jié)果,作為參數(shù)傳遞出去;
reject作用是,將Promise對(duì)象的狀態(tài)從“未完成”變?yōu)椤笆 保磸?nbsp;pending 變?yōu)?nbsp;rejected, 在異步操作失敗時(shí)調(diào)用,并將異步操作報(bào)出的錯(cuò)誤,作為參數(shù)傳遞出去。
基本語(yǔ)法
(1) Promise.then的基本語(yǔ)法:
一個(gè) promise 必須有一個(gè)then方法用于處理狀態(tài)改變 后面的then就是對(duì)前面返回的Promise的處理
(2)Promise 單一狀態(tài)與狀態(tài)中轉(zhuǎn)
(3) Promise的多種錯(cuò)誤檢測(cè)與catch的使用
(4) Promise.resolve
Promise.reject
Promise. all
Promise. allSettled
Promise的語(yǔ)法糖



浙公網(wǎng)安備 33010602011771號(hào)