文章背景:前几天在读给某个同事提了一个很蠢的问题,然后被吐槽api不熟悉,于是决定写一篇文章整理一下在开发&学习过程中promise一些需要了解的特性.

我当时的问题

我当时没看懂什么意思,后来理解了这段话要表达的是,如果直接在一个不知道是否返回标准promsie的值上面直接调用then ,可能会产生报错。

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的状态了。

2
promise.resolve
值得注意的一点是,resolve不仅仅可以传一个value进去 ,他还可以传 promsie对象和thnable对象。

mdn
https://developer.mozilla.org...
Promise.resolve(value)方法返回一个以给定值解析后的Promise 对象。但如果这个值是个thenable(即带有then方法),返回的promise会“跟随”这个thenable的对象,采用它的最终状态(指resolved/rejected/pending/settled);如果传入的value本身就是promise对象,则该对象作为Promise.resolve方法的返回值返回;否则以该值为成功状态返回promise对象。

34678
61 声望2 粉丝

FED-2018应届-yy.inc