Promise

CommonJs的Promise規(guī)范有許多種,我們一般討論的是Promise/A+規(guī)范,它定義了Promise的基本行為。

Promise是一個對象,它通常代表一個在未來可能完成的異步操作。這個操作可能成功也可能失敗,所以一個Promise對象一般有3個狀態(tài):Pending,F(xiàn)ulfilled,Rejected。分別代表未完成、成功完成和操作失敗。一旦Promise對象的狀態(tài)從Pending變成Fulfilled或者Rejected任意一個,它的狀態(tài)都沒有辦法再被改變。
  
  一個Promise對象通常會有一個then方法,這個方法讓我們可以去操作未來可能成功后返回的值或者是失敗的原因。這個then方法是這樣子的:

    promise.then(onFulfilled, onRejected)

顯而易見的是,then方法接受兩個參數(shù),它們通常是兩個函數(shù),一個是用來處理操作成功后的結果的,另一個是用來處理操作失敗后的原因的,這兩個函數(shù)的第一個參數(shù)分別是成功后的結果和失敗的原因。如果傳給then方法的不是一個函數(shù),那么這個參數(shù)會被忽略。

then方法的返回值是一個Promise對象,這一個特點允許我們鏈式調用then來達到控制流程的效果。這里有許多細節(jié)上的問題,比如值的傳遞或者錯誤處理等。Promise的規(guī)范是這樣定義的:
onFulfilled或者onRejected函數(shù)的返回值不是Promise對象,則該值將會作為下一個then方法中onFulfilled的第一個參數(shù),如果返回值是一個Promise對象,怎么then方法的返回值就是該Promise對象
onFulfilled或者onRejected函數(shù)中如果有異常拋出,則該then方法的返回的Promise對象狀態(tài)轉為Rejected,如果該Promise對象調用then,則Error對象會作為onRejected函數(shù)的第一個參數(shù)
如果Promise狀態(tài)變?yōu)镕ulfilled而在then方法中沒有提供onFulfilled函數(shù),則then方法返回的Promise對象狀態(tài)變?yōu)镕ulfilled且成功的結果為上一個Promise的結果,Rejected同理。

補充一句,onFulfilled和onRejected都是異步執(zhí)行的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調函數(shù)和事件——更合理和更強大。它由社區(qū)...
    夜幕小草閱讀 2,139評論 0 12
  • Promiese 簡單說就是一個容器,里面保存著某個未來才會結束的事件(通常是一個異步操作)的結果,語法上說,Pr...
    雨飛飛雨閱讀 3,373評論 0 19
  • Promise的含義: ??Promise是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調函數(shù)和事件——更合理和...
    呼呼哥閱讀 2,189評論 0 16
  • 本文適用的讀者 本文寫給有一定Promise使用經(jīng)驗的人,如果你還沒有使用過Promise,這篇文章可能不適合你,...
    HZ充電大喵閱讀 7,327評論 6 19
  • 1,打卡:每天走路10000步,2元,包括跑步2公里。1元。 每天讀書至少1小時,早晨30分鐘,晚上30分鐘。2...
    向日葵姑娘007閱讀 198評論 0 0