手写简版promise(四)实现then的链式调用

链式调用说明,then返回的还是一个promise实例,按照这个想法可以想一下

then(onResolve, onReject) {
    return new MyPromise((resolve, reject) => {
      const resolveFn = (val) => {
        let res = onResolve && onResolve(val)
        if (res instanceof MyPromise) {
          res.then(resolve)
        } else {
          resolve(res)
        }
      }
      this.resolveQueue.push(resolveFn)
      let onReject = (err) => { // reject状态没有.then方法
        rejectFn && rejectFn(err)
        reject(err)
      }
      this.rejectQueue.push(onReject)
    })
 }

最后完整的代码

export default class MyPromise {
  constructor(fn) {
    this['[[PromiseState]]'] = 'pending'
    this['[[PromiseResult]]'] = undefined

    this.resolveQueue = [] // 存储then方法中的成功的回调函数
    this.rejectQueue = [] // 存储then方法中的失败的回调函数

    fn(this._resolve.bind(this), this._reject.bind(this))
  }
  _resolve(succ

你可能感兴趣的:(promise原理,javascript)