js之模拟一个类似于Promise的函数去同步异步的处理

 写前端的时候经常在写Promise, 从来没有理解过Promise中的原理如何, Promise函数的结构非常巧妙,  简单的模拟一下

//模拟一个类似于Promise的函数去同步异步的处理
function MyPromise(func){
    let vm = this;
    vm.executed = false;//表明是否已执行mythen的回调
    vm.resolve = function(data){
        if(!vm.executed){
            vm.executed = true;
            try{
                //执行then的回调函数 这里的回调可以是一个数组, 依次执行回调
                vm.mythenCallback(data);
            }catch(e){
                try {
                    //then的回调函数执行失败, 执行catch的回调函数
                    vm.mycatchCallback(e);
                } catch (e2) {
                    console.log(e2);
                }
            }
        }
    }
    vm.reject = function(data){
        try{
            //执行catch的回调函数
            vm.mycatchCallback(data);
        }catch(e){
            console.log(e);
        }
    }
    //相当于then的回调函数
    vm.mythen = function(callback){
        vm.mythenCallback = callback;
        return vm;
    }
    //相当于catch的回调函数
    vm.mycatch = function(callback){
        vm.mycatchCallback = callback;
        return vm;
    }
    func(vm.resolve,vm.reject);
}

测试代码

new MyPromise(function(r,j){
    setTimeout(() => {
        r("MyPromise 测试1");
    }, 200);
}).mythen(function(res){
    console.log("res=",res);
    new MyPromise(function(r,j){
        setTimeout(() => {
            r("MyPromise 测试2");
        }, 100);
    }).mythen(function(res2){
        console.log("res2=",res2);
    }).mycatch(function(err){
        console.log("err=",err);
    })
}).mycatch(function(err){
    console.log("err=",err);
})

结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值