【问题标题】:How to use Promises in Node 4.x?如何在 Node 4.x 中使用 Promise?
【发布时间】:2015-12-26 10:21:55
【问题描述】:

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

有太多不同的 Promise 实现(Q、Bluebird 等),我不知道从哪里开始在 Node 4.x 中使用原生 Promise。

【问题讨论】:

  • 保证,你一定会很快得到答案的:)
  • 我知道没有内置的 node.js 模块会为其异步操作返回承诺。他们仍然使用他们一直使用的相同回调。您可以做的是“承诺”这些接口中的任何一个,以制作返回标准 node.js 异步调用约定之外的承诺的函数。事实上,使用 Bluebird 的 Promisify.promisifyAll() 之类的东西,您可以像 var fs = Promise.promisifyAll(require("fs")); 这样在 require() 时间承诺整个模块,然后该模块中的每个函数都有一个新的承诺版本。非常有用。

标签: javascript node.js promise


【解决方案1】:

你如何使用 Promise?

您可以通过使用新的构造函数 Promise 来使用“原生”promise。 API基础知识可以看over on MDN,深入学习Promisescan be found on HTML5Rocks

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

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

OP 中的一个 cmets 提到了 Bluebird 的 PromisifyAll,这似乎是一种将整个模块转换为使用 Promises 的神奇方式。漂亮!

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

至于为什么我们有 Promises一个回调风格的 API? 这可能是因为添加 Promises 比进行可能破坏性的 API 更改(例如删除回调)更容易。

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

确实如此。

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

documentation 始终是 API 问题的最佳去处。我不知道有什么会返回 Promises,但我承认我在日常工作中使用了一小部分 Node API。

有太多不同的 Promise 实现(Q、Bluebird 等),我不知道从哪里开始在 Node 4.x 中使用原生 Promise。

您对这些不同的实现有什么具体问题吗?我的想法是原生 Promise 非常小。它们足以使异步代码更简洁一些,但它们没有多余的装饰。您提到的那些其他库做了两件事:

  1. 为不支持原生 Promises 的环境提供 Polyfill
  2. 添加不同程度的花哨功能

Node.js 不再需要第一个用例。所以这是一个确定你是否想要/需要这些花哨功能的问题。

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

【讨论】:

    猜你喜欢
    • 2015-12-18
    • 2015-05-11
    • 2017-10-08
    • 2019-02-16
    • 1970-01-01
    • 2015-08-30
    • 2019-07-18
    • 2017-06-06
    • 1970-01-01
    相关资源
    最近更新 更多