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

时间:2016-03-16 15:22:47

标签: node.js promise q bluebird

在node.js学习诺言期间我有一些疑问。
'的承诺'已在node.js中定义 但似乎它似乎使用额外的承诺框架,如Q,蓝鸟,RSVP等 有什么理由吗?

核心node.js函数不能支持promise.denodeify函数的承诺吗?

2 个答案:

答案 0 :(得分:2)

我不能为Q说,但Bluebird比本机Promise快得多,并且在本机承诺之上提供了许多额外的功能。

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

此外,Bluebird比原始Promise实施具有更好的浏览器支持。

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

答案 1 :(得分:0)

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

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

所以在tl; dr; :

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

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