我应该在 ES6 节点项目中使用多少承诺?
How much should I be using promises in ES6 node projects?
在官方 bluebird promises 页面中写道,如果您使用 node.js,我不太可能必须自己编写 promises。
自从我开始一个新项目以来,我发现我所有的代码库都围绕着 promises。例如,我有一个 databaseConnector returns 一个承诺,一个接受承诺的快速路由,用 chai-as-promised 测试承诺,一般来说我没有写任何接收回调的函数。
我是否应该编写回调模块并在需要时对它们进行承诺?
有什么缺点?
与回调相比,您应该几乎总是使用promises。它们更具可读性,解决了一些嵌套问题并提供了一种标准化的错误通知方式(使用 reject()
)。
bluebird 官方承诺页面的意思可能是
- 在节点上,你通常可以使用流来解决更高效的问题(就像 gulp 那样),你经常使用回调而不是承诺(想想
es.map()
)
- 正如您提到的 es6,您可以使用 generators 而不是 callbacks/promises。它们不能很好地协同工作,所以坚持使用一个或另一个,但在某些情况下它们很方便。
- 您甚至可以使用 es7 功能 async/await,这有望在未来淘汰所有其他功能。
回调的缺点。好吧......他们曾经是 continuations 并且没有编译器设计者甚至想过直接用这个来打扰语言用户。然后 node.js 来了,现在每个人都写 无限嵌套 函数调用 不可读 (甚至不考虑调试),不要没有提供 错误处理 的方法(除了将 err
作为回调的第一个参数的事实标准)并且不能与同步代码很好地交互。
Should I be using promises in ES6 node projects?
是的,绝对是。 Promise 是 new 标准异步接口。
In the official bluebird promises page it is written that it's very unlikely I will have to write promises myself.
不完全是。他们是什么意思 here is that you hardly ever will need to use the new Promise
constructor function - most of its usages are an antipattern.
您将希望在任何地方使用承诺,但您不想从回调中显式创建它们。如果你有接受回调的异步代码,promisification 比 new Promise
.
更容易使用
Since I started on a new project I found all my code base revolving around promises
你很幸运!您正在使用的所有功能已经 return 并期待承诺 - 太好了!你可以只使用它们,拥抱它们。您不必担心承诺代码中的奇怪回调模式。
Should I be writing callback modules and if needed promisify them?
没有。如果您正在使用的所有 API 都已经使用了 promises,则尤其如此。 Promises 使代码更简单、更正确。 They're just great.
在官方 bluebird promises 页面中写道,如果您使用 node.js,我不太可能必须自己编写 promises。
自从我开始一个新项目以来,我发现我所有的代码库都围绕着 promises。例如,我有一个 databaseConnector returns 一个承诺,一个接受承诺的快速路由,用 chai-as-promised 测试承诺,一般来说我没有写任何接收回调的函数。
我是否应该编写回调模块并在需要时对它们进行承诺?
有什么缺点?
与回调相比,您应该几乎总是使用promises。它们更具可读性,解决了一些嵌套问题并提供了一种标准化的错误通知方式(使用 reject()
)。
bluebird 官方承诺页面的意思可能是
- 在节点上,你通常可以使用流来解决更高效的问题(就像 gulp 那样),你经常使用回调而不是承诺(想想
es.map()
) - 正如您提到的 es6,您可以使用 generators 而不是 callbacks/promises。它们不能很好地协同工作,所以坚持使用一个或另一个,但在某些情况下它们很方便。
- 您甚至可以使用 es7 功能 async/await,这有望在未来淘汰所有其他功能。
回调的缺点。好吧......他们曾经是 continuations 并且没有编译器设计者甚至想过直接用这个来打扰语言用户。然后 node.js 来了,现在每个人都写 无限嵌套 函数调用 不可读 (甚至不考虑调试),不要没有提供 错误处理 的方法(除了将 err
作为回调的第一个参数的事实标准)并且不能与同步代码很好地交互。
Should I be using promises in ES6 node projects?
是的,绝对是。 Promise 是 new 标准异步接口。
In the official bluebird promises page it is written that it's very unlikely I will have to write promises myself.
不完全是。他们是什么意思 here is that you hardly ever will need to use the new Promise
constructor function - most of its usages are an antipattern.
您将希望在任何地方使用承诺,但您不想从回调中显式创建它们。如果你有接受回调的异步代码,promisification 比 new Promise
.
Since I started on a new project I found all my code base revolving around promises
你很幸运!您正在使用的所有功能已经 return 并期待承诺 - 太好了!你可以只使用它们,拥抱它们。您不必担心承诺代码中的奇怪回调模式。
Should I be writing callback modules and if needed promisify them?
没有。如果您正在使用的所有 API 都已经使用了 promises,则尤其如此。 Promises 使代码更简单、更正确。 They're just great.