前言:談到promise,我們都知道它可能有三種狀態:等待(pending)、已完成(fulfilled)、已拒絕(rejecte),而且一個promise只可能從“等待”轉到“完成”態或者“拒絕”態;且狀態一旦改變便是不可逆的,談到promise,很多人想到的就是解決回撥地獄的問題,當我們在需要多個非同步請求都執行完再執行下一步操作時,可以考慮使用promise。這裡只簡單記錄下promise的使用。
1.簡單的使用:
當前案例:
有兩個非同步請求a和b,a請求返回的結果有b請求需要必須傳的請求引數:
a請求成功,進入resolve,b請求執行
a請求返回失敗,進入reject,直接進入catch,列印error資訊(失敗)
2.promise的all函式使用:
隨便一個請求隨機數小於5,終將直接進入promise。all的catch
只有當三個請求隨機生成的數字都大於5時才能進入promise。all的then裡邊,
返回的結果是一個數組,是a,b,c請求resolve的結果(成功)。
到這裡發現,使用promise。all時,只有當a,b,c請求都成功時,即進入resolve時,才能執行promise。all的then裡邊,否則終將都會進入promise的catch。
如果需要不管a,b,c是否都成功還是有失敗的,都輸出他們的返回結果,只需對著三個請求都catch下即可:
以a請求為例:(b,c請求同樣)
最終三請求不管成功與失敗,都將會返回結果,即都進入promise。all的then回撥裡邊,我們可以清楚地知道三請求的返回結果分別是啥。
任意一個失敗
全部都失敗
全部都成功