我不得不知道的promise知识点
文章背景:前几天在读给某个同事提了一个很蠢的问题,然后被吐槽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对象。
相关推荐
nmgxzm00 2020-11-10
xixixi 2020-11-11
88254251 2020-11-01
MarukoMa 2020-09-02
88234852 2020-09-15
陈旭阳 2020-08-31
whynotgonow 2020-08-19
前端开发Kingcean 2020-07-30
whynotgonow 2020-07-29
bowean 2020-07-08
前端开发Kingcean 2020-07-08
88520191 2020-07-05
前端开发Kingcean 2020-06-27
88481456 2020-06-18
whynotgonow 2020-06-16
88520191 2020-06-13
88520191 2020-06-13
89500297 2020-06-13