为什么在使用promise时使用Q,bluebird框架?

Why it use Q,bluebird framework when using promise?

在 node.js 学习 promise 期间。我有点怀疑。
'promise' 已在 node.js
中定义 但通常它似乎使用额外的承诺框架,如 Q、bluebird、RSVP 等
有什么原因吗?

是核心node.js函数不支持promise with promise.denodeify函数的原因吗?

我不能说 Q,但 Bluebird 比原生 Promises 快很多,并且在原生 promise 之上提供了一堆额外的功能。

这与人们使用 lodash 尽管 [].map() 多年的原因相同。

此外,Bluebird 比本机 Promise 实现具有更好的浏览器支持。


不过,您通常只在服务器上使用 Bluebird。额外的功能和速度不值得用户下载库的额外大小。

嗯,promise 是原生 JavaScript 对象。所有这些库都是用户态实现。例如,如果我们查看蓝鸟,它有:

  • 许多实用功能和帮助程序,让您的生活更轻松。
    • 它输入了 .catch 以确保您不会错误地捕捉到程序员的错误。
    • 它有 .some .any .map .filter 等等,可以轻松处理集合。
    • 它具有 .reflect 和同步检查承诺。
  • 在 then 处理程序中 throwing 时默认情况下不会吞下错误。
  • 内置协程(生成器)支持展平异步流。
  • 它比不同浏览器中的原生承诺更快(通常在 4 到 10 倍之间)。
  • 它提供了更多调试挂钩和更好的堆栈跟踪。
  • 它针对常见的 promise 反模式提供警告。
  • 它允许您覆盖调度程序,以便您可以确定它如何安排任务。
  • 它支持具有合理语义的 promise 取消,这是为原生 promise 提出但尚未采用的。

所以在 tl;dr; :

  • 速度更快。
  • 它更易于调试。
  • 它有更丰富的API。

现在,您是否应该使用它取决于您 - 包含库总是有开销 - 作为核心贡献者我有偏见。