文章背景:前几天在读给某个同事提了一个很蠢的问题,而后被吐槽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对象。