如何检查对象是否为承诺?
2022-08-29 23:13:45
无论是ES6还是蓝鸟,Q等。Promise
Promise
Promise
如何测试给定对象是否为 ?Promise
无论是ES6还是蓝鸟,Q等。Promise
Promise
Promise
如何测试给定对象是否为 ?Promise
如果它有一个函数 - 这是承诺库使用的唯一标准。.then
Promises/A+规范有一个叫做able的概念,它基本上是“一个带有方法的对象”。承诺将而且应该用一种然后的方法同化任何东西。您提到的所有承诺实现都这样做。then
then
如果我们看一下规范:
2.3.3.3 如果 是一个函数,则将其称为 x,如 this,第一个参数 resolvePromise,第二个参数 rejectPromise
then
它还解释了此设计决策的基本原理:
这种对 ables 的处理允许承诺实现进行互操作,只要它们公开了符合 Promises/A+ 的方法。它还允许Promises/A+实现用合理的方法“同化”不合格实现。
then
then
你不应该 - 相反,调用(在Q中)将始终将任何值或外部能力转换为可信的承诺。这比自己执行这些检查更安全,更容易。Promise.resolve(x)
Q(x)
then
您始终可以通过测试套件运行它:D
检查某些东西是否承诺不必要地使代码复杂化,只需使用Promise.resolve
Promise.resolve(valueOrPromiseItDoesntMatter).then(function(value) {
})