我如何判断对象是否是Promise?
无论是ES6 Promise还是蓝鸟Promise,Q Promise等等。
我如何测试以查看给定对象是否为Promise?
承诺库如何决定
如果它有一个.then
函数 - 这是唯一的标准许诺库使用。
Promises / A +规范有一个叫做then
的概念,它基本上是“一个具有then
方法的对象”。 承诺将会并且应该用当时的方法吸收任何东西。 你提到的所有承诺实现都是这样做的。
如果我们看一下规格:
2.3.3.3如果then
是一个函数,则使用x来调用它,第一个参数resolvePromise,第二个参数rejectPromise
它也解释了这个设计决定的基本原理:
的该处理then
ABLES允许许实现进行互操作,只要它们暴露承诺/ A +兼容then
方法。 它还允许Promises / A +实现通过合理的方法“吸收”不合格的实现。
你应该如何决定
你不应该-改为调用Promise.resolve(x)
Q(x)
在Q),将永远任何值或外部转换then
能够为值得信赖的承诺。 比自己执行这些检查更安全,更简单。
真的需要确定吗?
您可以随时通过测试套件运行它:D
检查是否有必要承诺的东西使代码复杂化,只需使用Promise.resolve
Promise.resolve(valueOrPromiseItDoesntMatter).then(function(value) {
})
这是我的原始答案,此后已被规范批准为测试承诺的方式:
Promise.resolve(obj) == obj
这是有效的,因为算法明确要求Promise.resolve
必须返回传入的确切对象,当且仅当它是规范定义的承诺。
我在这里有另一个答案,过去常常这样说,但当时它不适用于Safari,我将其更改为其他内容。 那是一年前,即使在Safari中也可以可靠地工作。
我会编辑我原来的答案,只是觉得不对,因为现在有更多的人投票支持修改后的答案。 我相信这是更好的答案,我希望你同意。
链接地址: http://www.djcxy.com/p/55449.html上一篇: How do I tell if an object is a Promise?
下一篇: How to get the value of the first promise that succeeds in a chain of promises