【发布时间】:2015-03-01 00:42:38
【问题描述】:
无论是 ES6 Promise 还是 bluebird Promise、Q Promise 等
如何测试给定对象是否是 Promise?
【问题讨论】:
-
您充其量可以检查
.then方法,但这并不能告诉您您所拥有的是明确的Promise。那时你所知道的就是你有一些东西暴露了一个.then方法,like一个 Promise。 -
@ScottOffen 承诺规范明确地没有区分。
-
我的观点是,任何人都可以创建一个对象来公开
.then方法,该方法不是 Promise,它的行为不像 Promise,也不打算像 Promise 那样使用。检查.then方法只是告诉你如果对象没有 有.then方法,那么你没有 有一个Promise。反过来——.then方法的存在意味着你确实有一个 Promise——不一定是真的。 -
@ScottOffen 根据定义,识别 Promise 的唯一既定方法是检查它是否具有
.then方法。是的,这有可能导致误报,但这是所有 Promise 库都依赖的假设(因为这是它们可以依赖的全部)。据我所知,唯一的选择是采纳 Benjamin Gruenbaum 的建议并通过 promise 测试套件运行它。但这对于实际的生产代码是不切实际的。 -
const isPromise = v => typeof v === 'object' && typeof v.then === 'function'
标签: javascript promise q bluebird es6-promise