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

既然ES6在Node 4.x中是正式的标准,那么你如何使用Promise呢? 模块(例如本地fs模块)是否自动与Promises一起工作? 或者模块必须专门编写才能使用Promise? 你怎么知道你可以使用一个承诺,什么你不能?

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

你如何使用承诺?

您可以使用新的构造函数Promise来使用“本地”承诺。 可以在MDN上findAPI的基础知识,并可以在HTML5Rocks上find有关Promise的深入研究。

模块(例如本地fs模块)是否自动与Promises一起工作?

他们没有,但是做一个包装并不难 。 当然,为整个Node API做这件事可能有点乏味。

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

我期望在即将到来的Node版本中有一些Promise-API API,但我不确定这一点。 有可能是一个问题或讨论周围的地方…也许在io.js项目。 我会调查并更新这个,如果我find任何东西。

至于为什么我们有Promise 一个callback式API? 这很可能是因为添加Promise比添加Promise更容易,比删除callback更有可能造成中断API更改。

或者模块必须专门编写才能使用Promise?

他们是这样。

你怎么知道你可以使用一个承诺,什么你不能?

文档始终是API问题的最佳select。 我不知道任何返回Promises的东西,但是我承认在我的日常工作中使用了Node API的一小部分。

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

你对这些不同的实现有任何具体的问题吗? 我想到的方式是本地承诺是相当小的。 他们足够好,使asynchronous代码更清洁,但他们没有装饰。 你提到的其他图书馆有两件事情:

  1. 为不支持本地Promise的环境提供Polyfill
  2. 添加不同程度的花式function

Node中不再需要第一个用例。 所以这是一个决定你是否想要/需要任何这些奇特function的问题。

让我知道如果这个答案不令人满意,我会尽量更新它更多的信息!