手写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的实现的主要内容,如果未能解决你的问题,请参考以下文章