实现一个类Pormise

发布时间:2019-08-20 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了实现一个类Pormise脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

核心代码

为了精简代码,下面的Promise实现中去掉了代码校验,这样方便小伙伴看到Promise的核心逻辑。ES6语法。

活不多说,直接放代码

class PromiseTest {
    executor = (resolve, reject) => {
    }

    constructor(executor) {
        this.executor = executor;
    }

    then(sucess, error) {
        let flag = true;
        let resolveV;
        let rejectV;
        const resolve = (value) => {
            flag = true;
            resolveV =  sucess(value);
        };
        const reject = (value) => {
            flag = false;
            rejectV = error(value);
        };
        this.executor(resolve, reject);
        // onfulfilled onrejected返回参数的传递  这是promise的精髓????
        return new PromiseTest((resolveSub, rejectSub) => {
            if (flag) {
                resolveSub(resolveV);
            } else {
                rejectSub(rejectV);
            }
        });
    }
}

有没有很简单,下面对照最典型的实用方法非小伙伴讲解一些这个简单的代码。

代码测试和代码讲解

const promise = new PromiseTest(function(resolve, reject) {
 if (true){
    resolve("sucess");
  } else {
    reject("erorr");
  }
});

promise.then(function (value) {
    console.log(value)    // => sucess
    return "sub " + value;
}, function (error) {
    console.log(error)    // => erorr
    return "sub " + error;
}).then(function (value) {
    console.log(value)  // => sub sucess
}, function (error) {
    console.log(error)  // => sub erorr 
});  
// 回调函数的返回值是可以传递的下一个then回调函数里面,这样可以像元promise一样无限传递下去????

简单的归纳一下,Promise构建的时候把你传入的executor(resolve, reject){}函数缓存到返回的promise对象中,当你调用promise的then方法的时候,就是执行你写的executor(resolve, reject){}函数,并then方法中定义的两个回调函数替换替换到构建Promise时定义的executor(resolve, reject){}中的两个入参。

当然promise不会像我说的这么简单,但是核心原理就是这个样的。

脚本宝典总结

以上是脚本宝典为你收集整理的实现一个类Pormise全部内容,希望文章能够帮你解决实现一个类Pormise所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。