文章背景:前几天在读给某个同事提了一个很蠢的问题,然后被吐槽api不熟悉,于是决定写一篇文章整理一下在开发&学习过程中promise一些需要了解的特性.
我当时的问题
我当时没看懂什么意思,后来理解了这段话要表达的是,如果直接在一个不知道是否返回标准promsie的值上面直接调用then ,可能会产生报错。
正题
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对象。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。