手写Promise的实现

Posted Smile沛沛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手写Promise的实现相关的知识,希望对你有一定的参考价值。

手写Promise的实现(then的链式调用)

promise特点分析:

  • Promise参数函数会立即执行
  • promise在then的回调函数中可以拿到resolve的值
  • promise可以有多个then并且依次链式调用执行
  • promise可以嵌套多个then,并且then中也是可以返回Promise
  • resolved状态的promise调用then会立即执行
  • 二次调用resolve不会产生影响

实现思路

  • promise是一个对象,一般通过new进行实例化
  • promise的then是可以链式调用的,因此要有then的链式调用的实现
  • 根据列出的特定实现
  • 实现Promise的构造方法和then方法
let State = {
  pending:'pending',
  resolved:'resolved',
  rejected:'rejected'
}

const noop = () => {}

class myPromise{
  constructor(exclutor){
    exclutor(this._resolve.bind(this),this._reject.bind(this))		//Promise回调函数立即执行
  }
  _state = State.pending;
  _value;
  
  _resolve(val){
    this._val = val;
    this._state = State.resolved;
    //如果是resolved就去执行then中传入的回调方法,并且将resolve返回值给它
    while(_resArr.length !== 0){	
      const item = _resArr.shift()
      item(this._val)
    }
  }
  _reject(){
    this._state = State.rejected;
  }
  
  _resArr = []
  then(onRes,onRej = noloop){
    const newPromise = new MyPromise(()=>{})
    this._resArr.push(onRes)
    return newPromise;		//返回Promise实现链式回调
  }
}

仔细看下来手写Promise的实现也是挺有意思的。理解Promise的一些基本的特点,比如:三种基本状态(pending、resolved、rejected)、then的链式调用、Promise传入的回调函数会立即执行、resolved会执行then中的回调方法并且传入参数等等。

以上是关于手写Promise的实现的主要内容,如果未能解决你的问题,请参考以下文章

手写Promise

JS手写面试题 --- Promise 以及相关方法的实现

手写简易版Promise

手写Promise的实现

手写Promise的实现

手写Promise的实现