手寫Promise實現過程

2022-06-27 04:09:10 字數 2045 閱讀 3727

手寫promise實現過程

// 定義好mypromise的三種狀態,用三個常量來接收

const pending = 'pending' // 等待

const fulfilled = 'fulfilled' // 成功

const rejected = 'rejected' // 失敗

class mypromise catch (e)

}// mypromise 有三種狀態 分別是:pending、fulfilled、rejected,一開始是pending狀態

status = pending

value = undefined // resolve傳遞的值

reason = undefined// reject傳遞的錯誤資訊

// successcallback = undefined

successcallback = // then方法多次呼叫時且執行器裡面是非同步時需將then方法裡面的**函式依此儲存在該陣列中

// failcallback = undefined

failcallback = // 同上

resolve = (val) =>

while(this.successcallback.length) this.successcallback.shift()()

}reject = (reason) =>

while(this.failcallback.length) this.failcallback.shift()()

}then(successcallback, failcallback)

/***then方法實現鏈式呼叫 */

// 能夠讓then方法實現鏈式呼叫,說明then方法返回的還是乙個 promise物件,我們現在就再建立個 promise物件 promise2,並將其返回

let promise2 = new mypromise((resolve, reject) => catch(e)

}, 0);

// resolve(x)

// 呼叫成功**函式,並傳遞成功時的值

//successcallback(this.value) // then方法被多次呼叫時,同步情況無需處理,直接呼叫即可

} else if(this.status === rejected) catch(e)

}, 0);

} else catch(e)

}, 0);

})// this.failcallback = failcallback

// this.failcallback.push(failcallback)

this.failcallback.push(() => catch(e)

}, 0);})}

})return promise2;

}/***finally 無論該promise物件是成功還是失敗都會執行 接受乙個**函式作為引數 */

finally(callback) , reason => )})}

/****catch方法 */

catch (failcallback)

// 靜態方法all,接受引數是乙個陣列

static all(arr)

}for(let i=0; i, reason => reject(reason))

} else }})

}/** 靜態方法 resolve,返回值是乙個promise物件,接受乙個引數,當這個引數是promise物件時

* 就將該物件作為 resolve方法的返回值,如果是個普通值,則將該值包裹在乙個promise物件中作為

* resolve方法的返回值

*/static resolve(value)

}function newpromise(promise2, x, resolve, reject)

if (x instanceof mypromise) else

}

手寫實現Promise的全部功能

發現的問題 在此過程中,發現 自己對 函式中的this指向,和詞法環境 的一些細節沒有掌握好,實現過程很痛苦!解決 應該惡補 下面上 1 function promise executor 16 17 18 1920 function reject data 31 32 3334 35 execut...

手寫promise封裝ajax

其實,axios本身就是基於promise進行封裝的,我們之所以進行二次封裝,主要是為了能夠對錯誤資訊進行乙個集中的處理,根據不同的錯誤資訊,需要給使用者不同的提示,以便於給使用者乙個良好的操作體驗。封裝方法有很多種,基於class類的,基於建構函式的,也可以直接封裝乙個函式。具體按照個人習慣,最主...

js手寫方法之 Promise

promise與async await是es6中常用的非同步操作方法,為了深刻理解promise的用法,解讀原始碼是乙個很好的方案。其核心方法是promise建構函式,以及.then方法,其他靜態方法都是在此基礎之上封裝的 為了方便理解,以下 經過了適當刪減 promise狀態常量值 狀態還未變化 ...