promisepromise 天生是乙個類,類中需要傳入乙個 executor 執行器,缺省會立即執行
promise 內部會提供兩個方法,可以更改 promise 的狀態
promise 總共有三種狀態 (等待態 成功態 失敗態)
3-1. resolve 觸發成功
3-2. reject 觸發失敗
promise 一旦成功就不會走失敗,反之同理
promise 中實現鏈式呼叫主要靠返回乙個新的 promise
const pending = 'pending'
const resolved = 'resolved'
const rejected = 'rejected'
function resolvepromise(promise2, x, resolve, reject)
// 2. 判斷 x 的型別
let called; // 遮蔽多次呼叫
if((typeof x === 'object' && x != null) || typeof x === 'function') , (r) => )
} else
} catch (e)
} else
}class promise
}let reject = (reason) =>
}try catch (e)
}catch(errcallback)
then(onfulfilled, onrejected)
let promise2 = new promise((resolve, reject) => catch (e)
}, 0);
}if(this.state == rejected) catch (e)
}, 0);
}if(this.state == pending) catch (e)
}, 0);
})this.onrejectedcallbacks.push(() => catch (e)
}, 0);})}
})return promise2
}}/**
* 1. 測試 promise 規範的指令碼
* 全域性安裝 npm i -g promises-aplus-tests
* 根目錄下執行 promises-aplus-tests promise.js
*/ promise.defer = promise.deferred = function()
dfd.promise = new promise((resolve, reject) => )
return dfd
}module.exports = promise
簡易版promise原始碼實現
首先我們先看一下promise是如何使用的 通過promise構建出來的物件有三種狀態,pending 進行中 fulfilled 已成功 rejected 已失敗 狀態只能由 pending 變為 fulfilled 或由 pending 變為 rejected 且狀態改變之後不會在發生變化,會一...
非同步解決方案promise及原始碼實現
js語言的特性,造就了特別的非同步處理方式,我記得以前用的最多的就是 函式,那個時候寫jquery的ajax時候,特別喜歡寫這種 ajax 後乙個ajax的傳送需要依賴前面的ajax的返回,也許有的朋友說還好啊,其實一兩個確實還好,但是多了就比較暈。不直觀。後面除錯起來有點麻煩。後來很多瀏覽器就自己...
vuex原始碼實現
let vue 自定義foreach迴圈 author suzhe datetime 2019 07 28t11 12 17 0800 param obj description param classback description const foreach obj,classback 格式化模...