2015-09-29 16 views
9

既然ES6在Node 4.x中是官方标准,那么你如何使用Promises?模块(例如本地fs模块)是否可以自动与Promises协同工作?或者模块必须专门编写才能与Promises协同工作?你怎么知道你可以使用诺言和不能做什么?如何在Node 4.x中使用Promise?

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

+4

我_promise_,你一定会很快得到答案:) – Tushar

+0

我知道没有内置的node.js模块返回他们的异步操作的承诺。他们仍然使用他们一直使用的相同回调。你可以做的就是“promisify”这些接口中的任何一个,以使得函数返回标准的node.js异步调用约定。事实上,使用像Bluebird的'Promisify.promisifyAll()'这样的东西,你可以在'require()'时间提交一个完整的模块,像这样'var fs = Promise.promisifyAll(require(“fs”));'然后每一个该模块中的函数具有新的承诺版本。很有用。 – jfriend00

回答

16

你如何使用Promise?

通过使用新的构造函数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,这看起来像是将整个模块转换为使用Promises的神奇方式。漂亮!

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

至于为什么我们有Promise 回调式API? 这可能是因为添加Promise比添加Promise更容易,而不是创建API更改(如删除回调)。

或模块必须专门编写与Promises一起工作?

他们这样做。

你怎么知道你可以用一个Promise和你不能做什么?

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

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

对这些不同的实现有任何具体问题吗?我想到的方式是原生Promise非常简单。它们足以让异步代码更清洁一些,但它们没有装饰。你提到的那些其他图书馆做两件事情:

  1. 提供一个填充工具为不支持原生的承诺
  2. 添加不同程度的花哨的功能环境

第一次使用的情况下,不再需要在节点中。所以这是一个决定你是否想要/需要任何这些奇特功能的问题。

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