怎么用es5实现promise

class myPromise{
    constructor(fun){
        console.log(1)
        this.state="ready"//ready准备状态 success成功回调后 error失败回调后
        this.start=function(){
            console.log(2)
            fun(this.resolve.bind(this),this.reject.bind(this))
        }
        setTimeout(()=>{this.start()})
    }
    error(){}//成功回调
    success(){}//失败回调
    resolve(res){//启动成功回调
        console.log(3)
        this.success(res)
        this.state='success'
    }
    reject(err){//启动失败回调
        console.log(4)
        this.error(err)
        this.state='error'
    }
    then(callback){//设置成功回调
        console.log(5)
        this.success=callback
        if(this.state!=='ready'){
            this.state="ready"
            this.start()
        }
        return this
    }
    catch(callback){//设置失败回调
        console.log(6)
        this.error=callback
        if(this.state!=='ready'){
            this.state="ready"
            this.start()
        }
        return this
    }
}

 

简单的实现prmise

1,首先是myPromise函数本体的参数,这个参数是作为启动这个防promise函数的关键点

2,我们需要一个判断当前状态的属性state,在实例对象重新触发then或者catch等

3,start函数是用启动函数 ,这个函数将在创建时执行或者在实例对象重新触发时在次执行

 

模拟异步函数

let example=function(x){
    return new myPromise((resolve,reject)=>{
        setTimeout(()=>{
            if(x>10){
                resolve('success')
            }else{
                reject('error')
            }
        },3000)
    })
}

 

 

 

执行获取效果

example(15).then((res)=>{
    console.log(res)
}).catch((res)=>{
    console.log(res)
})
// 1
// 5
// 6
// 2
// 3
//success

 

posted @ 2021-08-19 15:33  来吃点代码  阅读(581)  评论(0编辑  收藏  举报