class MyPromise{
constructor(fn){
this.queue = []
this.succ_res = null
this.fail_res = null
this.status = 'pending'
fn((...args) => {//resolve
this.succ_res = args
this.status = 'fulfilled'
this.queue.forEach((json) => {
json.fn1(...args)
})
},(...args) => {//reject
this.fail_res = args
this.status = 'rejected'
this.queue.forEach((json) => {
json.fn2(...args)
})
})
}
then(fn1,fn2){
if(this.status === 'fulfilled'){
fn1(...this.succ_res)
}else if(this.status === 'rejected'){
fn2(...this.fail_res)
}else{
this.queue.push({fn1,fn2})
}
}
}
MyPromise.all = function(arr){
let result = []
return new MyPromise(function(resolve,reject){
let i = 0
next()
function next(){
arr[i].then(function(res){
result.push(res)
i++
if(i == arr.length){
resolve(result)
}else{
next()
}
},reject)
}
})
}
let mp = new MyPromise(function(resolve,reject){
setTimeout(function(){
resolve(12)
},500)
})
mp.then(function (num){
console.log(num);
}, function (){
alert('錯誤')
})
let mp1 = new MyPromise(function(resolve,reject){
setTimeout(function(){
resolve(233)
},800)
})
MyPromise.all([mp,mp1]).then(function(arr){
let [res1,res2] = arr
console.log(res1)
console.log(res2)
},function(error){
console.log(error)
})
promise的簡單實現(xiàn)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- MyPromise的簡單偽實現(xiàn) Promise對象表示一個異步操作的最終結(jié)果,用來傳遞異步傳輸?shù)臄?shù)據(jù)。實現(xiàn)Prom...
- 利用nodejs的event模塊,可以實現(xiàn)一個最簡單的Promise/Deferred框架: Promise De...
- 那一年我離婚了之(四)——我這么好的女人,你是不是瞎了?。ㄖ校叭缓竽兀缓竽??”嘉慧像極了一個急于聽故事的孩子,...