Write Less & Do More
发布-订阅模式其实是一种对象间一对多的依赖关系,当一个对象的状态发送改变时,所有依赖于它的对象都将得到状态改变的通知。
简单点就是 收集依赖 => 触发通知 => 取出依赖执行
而 Promise 是 JS 异步编程中的重要概念,异步抽象处理对象,是目前比较流行 Javascript 异步编程解决方案之一,示例如下
1 | new Promise((resolve, reject) => { |
拆分如下:订阅者(then)把订阅的事件 (console.log) 注册到调度中心(Promise),当发布者(resolve, reject)发布该事件到调度中心,该事件触发时由调度中心统一调度订阅者注册到调度中心的处理代码, 输出 ‘fulfilled’。
简单实现
Promise构造函数用来声明示例对象,需要传入一个执行器函数。其中包括 resolve 函数和 reject 函数,以及几个重要的属性:状态属性、结果属性和回调函数队列。
1 | function _Promise(executor) { |
resolve 函数用于异步处理成功后调用的函数。其中包括验证对象状态修改次数,修改 promise 实例对象状态,异步调用成功的回调函数 onResolved,reject 同理
1 | function resolve(value) { |
then 原型函数用于为 promise 指定成功/失败的回调函数,返回值是一个新的 promise 对象。
1 | _Promise.prototype.then = function (onResolved, onRejected) { |
定义 _Promise 静态方法 resolve,reject
1 | _Promise.resolve = function (value) { |
调用栈(Call stack)
回顾到最开始的示例代码,那么 __Promise 的执行顺序应该是
constructor => resolve => then => constructor => handle
链式执行顺序 then => constructor => handle => …