我如何判断一个object 是否是一个Promise?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (3)
  • 关注 (0)
  • 查看 (3360)

无论是ES6 Promise还是bluebird Promise,Q Promise等等。

我如何测试以查看给定对象是否是Promise?

提问于
用户回答回答于

function isPromise(obj) {

return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function';

}

用户回答回答于

检查某些东西是否承诺不必要地使代码复杂化,只需使用Promise.resolve

Promise.resolve(valueOrPromiseItDoesntMatter).then(function(value) {

})
用户回答回答于

Promise如何决定

如果它有一个.then函数 - 这是唯一的标准Promise库使用。

Promises / A +规范有一个叫做thenable 的概念,它基本上是“一个有then方法的对象”。承诺会和应该吸收任何东西与当时的方法。所有你提到的承诺实现都这样做。

如果我们看看规范

2.3.3.3如果then是一个函数,就用这个x来调用它,第一个参数是resolvePromise,第二个参数是rejectPromise

它也解释了这个设计决定的基本原理:

这种对thenables的处理允许promise实现互操作,只要它们公开Promise / A +兼容then方法即可。它还允许Promises / A +实现用合理的方法“吸收”不一致的实现。

你应该如何决定

你不应该 - 而是打电话Promise.resolve(x)Q(x)在Q),总是将任何价值或外部转换then成可信任的承诺。比自己执行这些检查更安全,更简单。

真的需要确定吗?

你可以随时运行测试套件:D

所属标签

可能回答问题的人

  • 学生

    3 粉丝476 提问7 回答
  • uncle_light

    5 粉丝518 提问6 回答
  • o o

    4 粉丝494 提问5 回答
  • 富有想象力的人

    3 粉丝0 提问5 回答

扫码关注云+社区

领取腾讯云代金券