如何在Node 4.x中使用Promise?

时间:2015-09-29 04:00:54

标签: javascript node.js promise

现在ES6已经成为Node 4.x的正式标准,你如何使用Promises?模块(例如本机fs模块)是否自动与Promises一起使用?或者必须专门编写模块以与Promises一起使用?你怎么知道你可以使用什么承诺以及你能做什么?

有很多不同的Promise实现(Q,Bluebird等)让我对从Node 4.x中的本机Promise开始的地方感到困惑。

1 个答案:

答案 0 :(得分:16)

  

你如何使用Promises?

你可以使用" native"承诺使用新的构造函数Promise。可以找到API的基础知识over on MDN,以及对Promises can be found on HTML5Rocks的深入研究。

  

模块(例如本机fs模块)是否自动与Promises一起使用?

他们没有,但是it's not so difficult to make a wrapper。当然,为整个Node API执行此操作可能有点乏味。

OP中的一条评论提到了Bluebird的PromisifyAll,这似乎是将整个模块转换为使用Promise的神奇方法。漂亮!

我希望在即将推出的Node版本中有一些Promise-ified API,但我不确定这一点。围绕这个可能存在问题或讨论......也许在io.js项目上。如果我找到任何内容,我会调查并更新。

至于为什么我们有Promise 一个回调式API? 这可能是因为它更容易被添加,添加Promise,而不是可能破坏API更改,例如删除回调。

  

或者必须专门编写模块以与Promises一起使用?

他们这样做。

  

你怎么知道你可以使用什么承诺以及你能做什么?

documentation始终是API问题的最佳选择。我不知道任何返回Promises的东西,但我确实在我的日常工作中使用了一小部分Node API。

  

有很多不同的Promise实现(Q,Bluebird等)让我对从Node 4.x中的本机Promise开始的地方感到困惑。

您对这些不同的实施有任何具体问题吗?我想到的方式是本机Promise非常小。它们足以使异步代码更清晰,但它们没有多余的装饰。你提到的其他图书馆做了两件事:

  1. 为不支持原生承诺的环境提供Polyfill
  2. 添加不同程度的花哨功能
  3. Node中不再需要第一个用例。因此,确定您是否需要/需要任何这些奇特的功能都是一个问题。

    如果这个答案不能令人满意,请告诉我,我会尝试用更多信息更新它!