JS之Promise(2)
- Promise 的狀態(tài)
實(shí)例化的 Promise 有三個(gè)狀態(tài):
Fulfilled: has-resolved, 表示成功解決沪猴,這時(shí)會(huì)調(diào)用 onFulfilled.
Rejected: has-rejected, 表示解決失敗眶熬,此時(shí)會(huì)調(diào)用 onRejected.
Pending: unresolve, 表示待解決锹雏,既不是resolve也不是reject的狀態(tài)。也就是promise對(duì)象剛被創(chuàng)建后的初始化狀態(tài).
上面我們提到 Promise 構(gòu)造函數(shù)接受一個(gè)函數(shù)作為參數(shù)蟀给,該函數(shù)的兩個(gè)參數(shù)分別是 resolve 和 reject.
resolve函數(shù)的作用是怔蚌,將 Promise 對(duì)象的狀態(tài)從 未處理 變成 處理成功 (unresolved => resolved), 在異步操作成功時(shí)調(diào)用虱饿,并將異步操作的結(jié)果作為參數(shù)傳遞出去。
reject函數(shù)的作用是触趴,將 Promise 對(duì)象的狀態(tài)從 未處理 變成 處理失敗 (unresolved => rejected), 在異步操作失敗時(shí)調(diào)用氮发,并將異步操作報(bào)出的錯(cuò)誤,作為參數(shù)傳遞出去冗懦。
Promise 實(shí)例生成以后爽冕,可以用 then 方法和 catch 方法分別指定 resolved 狀態(tài)和 rejected 狀態(tài)的回調(diào)函數(shù)。 - Promise的基本API
resolve:該方法可以使 Promise 對(duì)象的狀態(tài)改變成成功披蕉,同時(shí)傳遞一個(gè)參數(shù)用于后續(xù)成功后的操作扇售。
reject:該方法則是將 Promise 對(duì)象的狀態(tài)改變?yōu)槭∏八瑫r(shí)將錯(cuò)誤的信息傳遞到后續(xù)錯(cuò)誤處理的操作。
then: 所有的 Promise 對(duì)象實(shí)例里都有一個(gè) then 方法承冰,它是用來(lái)跟這個(gè) Promise 進(jìn)行交互的,then方法主要傳入兩個(gè)方法作為參數(shù)食零,一個(gè) resolve 函數(shù)困乒,一個(gè) reject 函數(shù),鏈?zhǔn)秸{(diào)用 贰谣,上一個(gè)Promise對(duì)象變?yōu)閞esolved的時(shí)候娜搂,調(diào)用then中的Resolve方法,否則調(diào)用Reject方法吱抚,且then 方法會(huì)缺省調(diào)用 resolve() 函數(shù)百宇。
catch:該方法是 then(onFulfilled, onRejected) 方法當(dāng)中 onRejected 函數(shù)的一個(gè)簡(jiǎn)單的寫(xiě)法,也就是說(shuō)也可以寫(xiě)成then秘豹,但是用來(lái)捕獲異常時(shí)携御,用catch更加便于理解。
all:該方法可以接收一個(gè)元素為 Promise 對(duì)象的數(shù)組作為參數(shù)既绕,當(dāng)這個(gè)數(shù)組里面所有的 Promise 對(duì)象都變?yōu)?resolve 時(shí)啄刹,該方法才會(huì)返回。就是全部都執(zhí)行完了才接著往下執(zhí)行凄贩。
race:按字面解釋?zhuān)褪琴惻艿囊馑际木瑀ace 的用法與 all 一樣,只不過(guò) all 是等所有異步操作都執(zhí)行完畢后才執(zhí)行 then 回調(diào)疲扎。而 race 的話(huà)只要有一個(gè)異步操作執(zhí)行完畢昵时,就立刻執(zhí)行 then 回調(diào)。