有不对的地方请告知,谢谢!
本文章只是最基础的promise实现方式
先来说说promise 的优缺点
优:解决了异步的嵌套问题啊 也就是回调地狱 解决了异步并发的问题啊
缺:状态一旦改变就不会再改变
这里只处理了同步方法也是最基础,继续.then 时的处理的处理方法
//首先定义状态 方便后面使用
const PEDDING = 'PEDDING'
const RESOLVE = 'RESOLVE'
const REJECT = 'REJECT'
class Promise{
constructor(executor){
this.state = PEDDING //定义状态
this.successVal = undefined // 用于保存成功的值
this.errVal = undefined // 用于保存失败的值
this.resolvecb = []
this.rejectcb = []
let resolve = (value) = >{
if(this.state === PEDDING ){ // 用来做限制 resolve reject 只能调一个
this.state = RESOLVE
this.successVal = value
//为pending 时的处理
this.resolvecb.forEach(fn=>fn())
}
}
let reject = (err) =>{
if(this.state === PEDDING){
this.state = REJECT
this.errVal = err
this.rejectcb.forEach(fn=>fn())
}
}
try{
executor(resolve,reject) //默认先上来会执行
}catch(reason){
reject(reason)
}
}
then(onResolve,onReject){
if(this.state === RESOLVE ){
onResolve(this.successVal)
}
if(this.state === RESOLVE){
onReject(this.errVal )
}
if(this.state === PEDDING ){
this.resolvecb.push(()={ //此处用切片函数
onResolve(this.successVal)
})
this.rejectcb.push(()=>{
onReject(this.errVal)
})
}
}
}
这次更新了对pedding 的处理后续更新对then 的处理