#iOS 之 Promise简易实现

iOS 之 Promise简易实现

Promises/A的API规范

1. 有限状态机

Promise 有一个有限状态机,共有三种状态:pending(执行中)、fulfilled(执行成功)和rejected(执行失败)。

其中pending为初始状态,fulfilled和rejected为结束状态(结束状态表示promise的生命周期已结束)。

状态转换关系为:pending->fulfilled,pending->rejected。

#iOS 之 Promise简易实现_第1张图片
state.png

2.实例方法

Promise then([{Function} onFulfilled[, {Function} onRejected]]) , 用于订阅Promise对象状态转换事件,入参onFulfilled为执行成功的事件处理函数,入参onRejected为执行失败的事件处理函数。两 者的返回值均作为Promise对象单向链表中下一个Promise对象的状态转换事件处理函数的入参。而then方法的返回值是一个新的Promise 对象并且已添加到Promise对象单向链表的末尾。

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

#iOS 之 Promise简易实现_第2张图片
functionV1.0.png

3.状态函数

Promise({Function} factory/({Function} resolve, {Function} reject)/) ,构造函数存在一个Function类型的入参factory,作为唯一一个修改promise对象状态的地方,其中factory函数的入参resolve的作用是将promise对象的状态从pending转换为fulfilled,而reject的作用是将promise对象的状态从pending转换为rejected。

入参 void resolve({Any} val) , 当val为非thenable对象和promise对象时则会将val作为执行成功事件处理函数的入参,若val为thenable对象时则会执行 thenable.then方法,若val为Promise对象时则会将该Promise对象添加到Promise对象单向链表中。

入参 void reject({Any} reason) ,reason不管是哪种内容均直接作为执行失败事件处理函数的入参。

Note:关于抛异常的做法,同步模式为 throw new Error("I'm synchronous way!") ,而Promise规范的做法是 reject(new Error("I'm asynchronous way!"));

#iOS 之 Promise简易实现_第3张图片
stateModifyV2.0.png
4.0 Demo地址

简单的应用


#iOS 之 Promise简易实现_第4张图片
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

你可能感兴趣的:(#iOS 之 Promise简易实现)