#iOS 之 Promise簡易實現(xiàn)

iOS 之 Promise簡易實現(xiàn)

Promises/A的API規(guī)范

1. 有限狀態(tài)機

Promise 有一個有限狀態(tài)機,共有三種狀態(tài):pending(執(zhí)行中)、fulfilled(執(zhí)行成功)和rejected(執(zhí)行失?。?。

其中pending為初始狀態(tài),fulfilled和rejected為結(jié)束狀態(tài)(結(jié)束狀態(tài)表示promise的生命周期已結(jié)束)。

狀態(tài)轉(zhuǎn)換關系為:pending->fulfilled,pending->rejected。

state.png

2.實例方法

Promise then([{Function} onFulfilled[, {Function} onRejected]]) , 用于訂閱Promise對象狀態(tài)轉(zhuǎn)換事件,入?yún)nFulfilled為執(zhí)行成功的事件處理函數(shù),入?yún)nRejected為執(zhí)行失敗的事件處理函數(shù)。兩 者的返回值均作為Promise對象單向鏈表中下一個Promise對象的狀態(tài)轉(zhuǎn)換事件處理函數(shù)的入?yún)?。而then方法的返回值是一個新的Promise 對象并且已添加到Promise對象單向鏈表的末尾。

Promise catch({Function} onRejected) ,相當于 then(null, onRejected) 。

functionV1.0.png

3.狀態(tài)函數(shù)

Promise({Function} factory/({Function} resolve, {Function} reject)/) ,構(gòu)造函數(shù)存在一個Function類型的入?yún)actory,作為唯一一個修改promise對象狀態(tài)的地方,其中factory函數(shù)的入?yún)esolve的作用是將promise對象的狀態(tài)從pending轉(zhuǎn)換為fulfilled,而reject的作用是將promise對象的狀態(tài)從pending轉(zhuǎn)換為rejected。

入?yún)?void resolve({Any} val) , 當val為非thenable對象和promise對象時則會將val作為執(zhí)行成功事件處理函數(shù)的入?yún)ⅲ魐al為thenable對象時則會執(zhí)行 thenable.then方法,若val為Promise對象時則會將該Promise對象添加到Promise對象單向鏈表中。

入?yún)?void reject({Any} reason) ,reason不管是哪種內(nèi)容均直接作為執(zhí)行失敗事件處理函數(shù)的入?yún)ⅰ?br>

Note:關于拋異常的做法,同步模式為 throw new Error("I'm synchronous way!") ,而Promise規(guī)范的做法是 reject(new Error("I'm asynchronous way!"));

stateModifyV2.0.png
4.0 Demo地址

簡單的應用


screenshot.png

https://github.com/softwarefaith/JAPP-Promise-ObjC

不夠完善,比較簡陋

參考文章

1.阿里https://yq.aliyun.com/articles/31914

2.美團http://tech.meituan.com/promise-insight.html

3.阮一峰http://javascript.ruanyifeng.com/advanced/promise.html

3.deferhttp://www.ruanyifeng.com/blog/2011/08/a_detailed_explanation_of_jquery_deferred_object.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 本文適用的讀者 本文寫給有一定Promise使用經(jīng)驗的人,如果你還沒有使用過Promise,這篇文章可能不適合你,...
    HZ充電大喵閱讀 7,458評論 6 19
  • //本文內(nèi)容起初摘抄于 阮一峰 作者的譯文,用于記錄和學習,建議觀者移步于原文 概念: 所謂的Promise,...
    曾經(jīng)過往閱讀 1,320評論 0 7
  • Promiese 簡單說就是一個容器,里面保存著某個未來才會結(jié)束的事件(通常是一個異步操作)的結(jié)果,語法上說,Pr...
    雨飛飛雨閱讀 3,491評論 0 19
  • Promise 看了些promise的介紹,還是感覺不夠深入,這個在解決異步問題上是一個很好的解決方案,所以詳細看...
    潘逸飛閱讀 20,074評論 12 34
  • 00、前言Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強大。它由社區(qū)...
    夜幕小草閱讀 2,227評論 0 12

友情鏈接更多精彩內(nèi)容