我不得不知道的promise知識點

文章背景:前幾天在讀給某個同事提了一個很蠢的問題,而後被吐槽api不熟悉,因而決定寫一篇文章整理一下在開發&學習過程當中promise一些須要瞭解的特性.

我當時的問題api

我當時沒看懂什麼意思,後來理解了這段話要表達的是,若是直接在一個不知道是否返回標準promsie的值上面直接調用then ,可能會產生報錯。promise

clipboard.png

正題
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對象。
相關文章
相關標籤/搜索