怎么用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