文章背景:前幾天在讀給某個同事提了一個很蠢的問題,而後被吐槽api不熟悉,因而決定寫一篇文章整理一下在開發&學習過程當中promise一些須要瞭解的特性.
我當時的問題api
我當時沒看懂什麼意思,後來理解了這段話要表達的是,若是直接在一個不知道是否返回標準promsie的值上面直接調用then ,可能會產生報錯。promise
正題
1promise的控制反轉
例子:
定義一個把promise的回調暴露出來的方法異步
module.exports = function createExposedPromise () { let resolve, reject const promise = new Promise((rs, rj) => { resolve = rs reject = rj }) return { promise, executor: { resolve, reject } } }
使用學習
const AEMonitorServer = createScriptMonitor( AE_SCRIPT_MONITOR_DEFUALTS.host, AE_SCRIPT_MONITOR_DEFUALTS.port, data => handleMonitorMessage(data, statusPromiseMap, quickLogger), error => handleMonitorError(error, AEMonitorErrorPromise.executor.reject) )
當咱們promise的狀態依賴於另一個異步事件,可是另一個異步事件是cb形式的,爲了和咱們外部的promise創建聯繫,咱們就使用promise的控制反轉的功能實現.把promise的reject和resolve暴露出來,就能夠在cb裏面改變promise的狀態了。ui
2
promise.resolve
值得注意的一點是,resolve不單單能夠傳一個value進去 ,他還能夠傳 promsie對象和thnable對象。spa
mdn
https://developer.mozilla.org... Promise.resolve(value)方法返回一個以給定值解析後的Promise 對象。但若是這個值是個thenable(即帶有then方法),返回的promise會「跟隨」這個thenable的對象,採用它的最終狀態(指resolved/rejected/pending/settled);若是傳入的value自己就是promise對象,則該對象做爲Promise.resolve方法的返回值返回;不然以該值爲成功狀態返回promise對象。