最简实现
Promise
代码
1 | function Promise(fn) { |
分析
先上使用例子
1 | new Promise((resolve,reject) => { |
首先分析Promise构造函数
1 | // 此处fn为new Promise传入的函数 |
Promise最重要的是链式调用,重点在then的实现方式
1 | Promise.prototype.then = function(onResolved) { |
结合例子
- 第一次 new Promise() 执行时,返回的实例称为 promise1
- then 的实现中,返回的实例称为 promise2
- 第一次 new Promise().then 中,用户手动 return new Promise() 这里称为 user promise
- 在 promise2 中的this,其实指向 promise1。在 promise2 中的函数会往this.cbs推入,等待执行
- 而 this.cbs.push() 中的函数,只有在 promise1 resolve后才会执行。如果用户传入给 then 的执行函数中 (onResolved ) 返回了 user promise ,用户会在合适的时机执行 resolve promise2 ,这时内部的
if (res instanceof Promise) { res.then(resolve) }
就会执行 - then2 中的函数只有在 promise2 resolve 后才会执行,此时 then2 是挂载到 promise2 的cbs中的,最终实现异步链式调用