手写promise

84 阅读1分钟
//首先创建一个promise 类const STATUS = {    PENDING :'pending',    FULFILLD:'fufilled',    REJECTED:'rejected',};class Lpromise{    status = STATUS.PENDING;    resloves = []; //用于then 中的回调函数存储,以便在resloves 时执行    rejects = [];    reslove = (value) => {        //改变状态        // 保存值        //触发回调        const {resloves} = this;        if(this.status !== STATUS.PENDING) return;        this.status = STATUS.FULFILLD;        console.log(this);        while (resloves.length){            const resloveFn = resloves.shift();//数组中取出第一个值            resloveFn(value);        console.log(            "🚀 ~ file: HePromise.html:27 ~ HePromise ~ newVal:",            value            );        }    };    reject = (value) => {        //改变状态        // 保存值        //触发回调        const {rejects} = this;        if(this.status !== STATUS.PENDING) return;        this.status = STATUS.REJECTED;        console.log(this);        while (rejects.length){            const rejectFn = rejects.shift();//数组中取出第一个值            rejectFn(value);            console.log("🚀 ~ file: HePromise.html:27 ~ HePromise ~ newVal:",rejectFn);        }    };    constructor(executor){        executor(this.reslove,this.reject);    }      then(resloveFn,rejectFn){        this.resloves.push(resloveFn);//存储数据到resloves上        rejectFn && this.rejects.push(rejectFn);        console.log("then");        return this;    }    catch(){        console.log("catch");        this.rejects.push(rejectFn)    }    finally(){        console.log("finally")    }}// Lpromise 构造函数 传入一个回调const lpromise = new Lpromise((reslove,reject) => {    setTimeout(()=>{        reslove("hello world")    },1000)});lpromise.then((res) =>{    console.log("11");    return "res" + res;}).then((res)=>{    console.log(res + "111")});