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

Jak*_*son 10 javascript node.js promise

既然ES6是Node 4.x的官方标准,你如何使用Promises?模块(例如本机fs模块)是否自动与Promises一起使用?或者必须专门编写模块以与Promises一起使用?你怎么知道什么可以使用Promise而你不能使用什么?

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

jam*_*ase 16

你如何使用Promises?

您可以使用新的构造函数Promise来使用"native"promises.API的基础知识,可以发现在MDN过,并承诺的深入研究可以的HTML5Rocks找到.

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

他们没有,但制作包装并不困难.当然,为整个Node API执行此操作可能有点单调乏味.

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

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

至于为什么我们有Promises 和回调式API?这可能是因为添加Promise比添加Promises更容易,比如删除回调更可能会破坏API.

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

他们是这样.

你怎么知道什么可以使用Promise而你不能使用什么?

该文件总是去API问题的最佳场所.我不知道返回Promises的任何东西,但我确实在我的日常工作中使用了一小部分Node API.

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

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

  1. 为不支持本机Promise的环境提供Polyfill
  2. 添加不同程度的花哨功能

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

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