【问题标题】:Native promises vs. Bluebird promises原生承诺与蓝鸟承诺
【发布时间】:2017-03-30 07:02:11
【问题描述】:

Node.js 中有没有办法检查global.Promise 是否是本机承诺实现?与 Bluebird 承诺等相反?

【问题讨论】:

  • 你可以通过在 API 上进行鸭式输入来做相反的事情。说 .promisifyAll 代表 bluebird 或 .fapply 代表 Q 但这无助于检测原生。我不确定替换 global.Promise 一开始是个好主意。
  • @Matt 我不会替换 global.Promise,虽然我图书馆的用户可能会这样做,但我无法控制它,但需要检测它。我同意替换 global.Promise 可能是一个坏举动。

标签: node.js bluebird es6-promise


【解决方案1】:

您可以进行功能测试并测试以查看是否存在任何 Bluebird 扩展功能:

function testBluebird() {
   // test to see if a representative sample of Bluebird-specific features are present
   return Promise && Promise.join && Promise.try && Promise.method && Promise.map;
}

与 Javascript 中的许多事情一样,您可能应该只是测试一下您想要使用的功能是否存在,而不是尝试确定是否加载了特定的库。

【讨论】:

  • 谢谢,我最感兴趣的是确定一个 Promise 是否是本地的,而不是确定一个 Promise 是否是 Bluebird,但这应该适用于 Bluebird
  • @AlexanderMills - 你真正想解决什么问题?为什么你想知道它是否是本地的?除了 Bluebird 之外,肯定还有其他非原生的 Promise 实现,所以返回的 false 并不能保证 Promise 是原生的。
  • 我需要修补原生的 Promise 实现,但如果不是原生的,我不想修补 Promise。
  • @AlexanderMills - 修补它有什么用?如果您告诉我们真正的问题,我们可以针对您的实际问题为您提供更直接的建议。
  • 问题是我不知道 global.Promise 是原生 Promise 实现还是其他一些实现。我需要知道它是否是原生的 Promise。我在打猴子然后(),见:github.com/nodejs/help/issues/555
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-13
  • 2014-11-06
  • 2015-09-06
  • 2015-02-13
  • 1970-01-01
相关资源
最近更新 更多