由于有一个new Promise combinator,叫做Promise.allSettled
,所以我有兴趣根据承诺解决状态执行一些代码逻辑。
例如:
Promise.allSettled([
callApi("http://example.com/wishlist"),
callApi("http://example.com/brands")
])
.then(([wishlist, brands]) => {
if(brands.status === "failed"){
notifyMe()
}
})
如您所见,我正在使用一个静态值来比较Promise brands.status === "failed"
的解析状态
您可以称我为偏执狂,但JavaScript将来如何演变此值可能会有所变化,我希望静态性较低。
我的问题是:是否有任何Symbol.PromiseRejected|Symbol.PromiseResolved
或相关的东西封装了承诺解决方案?
答案 0 :(得分:1)
您可以称我为偏执狂,但是JavaScript将来如何改变此值可能会改变
不,不会。 JS将(需要)保持向后兼容,这将永远不会改变。也没有理由重命名.status
属性,这也不像这样的结果对象(或迭代器结果对象等)的属性名称会与任何新内容发生冲突。
我的问题是:是否有
Symbol.PromiseRejected|Symbol.PromiseResolved
或相关的东西封装了承诺解决方案?
不,没有。无论如何,它们不是符号。
如果您绝对偏执,可以在write your own trivial allSettled
function中控制结果对象的形状,也可以编写isRejected(result)
和isFulfilled(result)
辅助函数以在任何地方调用,如果发生某些不太可能的更改,则只需更改一行代码即可。