1 回答
TA貢獻1826條經驗 獲得超6個贊
Promise的思想就是把所有同步和異步的代碼都視為異步代碼,then方法內部會返回一個新的Promise(鏈式調用),then方法的第一個參數onfulfilled是在前一個Promise對象的異步調用完成之后調用的
then(onfulfilled, onrejected){
// 每個then方法都返回一個新的promise對象,實現鏈式調用
return new Promise((resolve, reject)=>{
let success = (value)=>{
// 這里執行onFulfilled,判斷是否是promise對象并將返回結果作為參數傳遞到當前promise的reslove中
// 如果沒有返回值,則默認返回原本的value值,這一步的處理并不是必須的
let result = onfulfilled(value) || value;
if (isThenable(result)){
result.then((value)=>{
resolve(value);
}, (value)=>{
reject(value);
});
}else {
resolve(result);
}
}
let error = (value)=>{
let result = onrejected(value) || value;
resolve(result);
}
// 當調用then方法的那個promise對象onfulfilled時調用success,執行上面的操作
switch(this.status){
case PENDING:
this.onfulfilled = success;
this.onrejected = error;
break;
case FULFILLED:
success(this.value);
break;
case REJECTED:
error(this.reason);
break;
}
})
}
這里還是牽扯到Promise構造函數內部的一些實現,剛好前幾天實現了一個簡單的Promise,這里是傳送門,希望對您有所幫助
添加回答
舉報
