承诺状态是否有任何符号?

时间:2019-06-23 10:23:35

标签: javascript promise ecmascript-next

由于有一个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或相关的东西封装了承诺解决方案?

1 个答案:

答案 0 :(得分:1)

  

您可以称我为偏执狂,但是JavaScript将来如何改变此值可能会改变

不,不会。 JS将(需要)保持向后兼容,这将永远不会改变。也没有理由重命名.status属性,这也不像这样的结果对象(或迭代器结果对象等)的属性名称会与任何新内容发生冲突。

  

我的问题是:是否有Symbol.PromiseRejected|Symbol.PromiseResolved或相关的东西封装了承诺解决方案?

不,没有。无论如何,它们不是符号。

如果您绝对偏执,可以在write your own trivial allSettled function中控制结果对象的形状,也可以编写isRejected(result)isFulfilled(result)辅助函数以在任何地方调用,如果发生某些不太可能的更改,则只需更改一行代码即可。