#iOS 之 Promise简易实现

iOS 之 Promise简易实现

Promises/A的API规范

1. 有限状态机

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

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

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

state.png

2.实例方法

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

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

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!"));

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本文适用的读者 本文写给有一定Promise使用经验的人,如果你还没有使用过Promise,这篇文章可能不适合你,...
    HZ充电大喵阅读 7,351评论 6 19
  • //本文内容起初摘抄于 阮一峰 作者的译文,用于记录和学习,建议观者移步于原文 概念: 所谓的Promise,...
    曾经过往阅读 1,263评论 0 7
  • Promiese 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果,语法上说,Pr...
    雨飞飞雨阅读 3,395评论 0 19
  • Promise 看了些promise的介绍,还是感觉不够深入,这个在解决异步问题上是一个很好的解决方案,所以详细看...
    潘逸飞阅读 19,893评论 12 34
  • 00、前言Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区...
    夜幕小草阅读 2,156评论 0 12