我应该在ES6节点项目中使用多less承诺?
在官方的蓝鸟承诺页面中写道,如果你使用的是node.js,那么我不太可能自己写承诺。
自从我开始一个新项目以来,我发现我所有的代码都围绕着诺言。 例如,我有一个数据库连接器,它返回一个承诺,一个承诺承诺的快速路由,testing承诺,承诺testing承诺,一般我没有写任何接收callback的函数。
我应该写callback模块,如果需要promisify他们?
有什么缺点?
我应该在ES6节点项目中使用promise吗?
是的,明确的。 承诺是新的标准asynchronous接口。
在官方的蓝鸟承诺页面中写道,我不太可能自己写诺言。
不完全是。 这里的意思是,你几乎不需要使用new Promise
构造函数 – 它的大部分用法都是反模式 。
你会希望在任何地方使用promise ,但是你不想从callback中明确地创build它们。 如果你有asynchronous代码需要callback, promisification比new Promise
更容易使用。
自从我开始一个新项目以来,我发现我所有的代码都围绕着诺言
你很幸运! 所有你正在使用的function已经返回并期待承诺 – 这太棒了! 你可以使用它们,拥抱它们。 您不必担心承诺代码中的奇怪callback模式。
我应该写callback模块,如果需要promisify他们?
不是,如果你所使用的所有API已经使用promise。 承诺做出更简单,更正确的代码。 他们很棒 。
与callback相比,你几乎总是使用承诺 。 它们更可读,解决一些嵌套问题,并提供一个标准化的方式来通知错误(使用reject()
)。
官方的蓝鸟承诺网页可能意味着什么
- 在节点上,你可以经常使用stream来解决更多的性能问题(比如gulp),在那里你经常有callback而不是promise(想想
es.map()
) - 正如你提到的es6 ,你可以使用生成器而不是callback/承诺。 他们在一起工作不好,所以坚持一个或另一个,但在某些情况下,他们很方便。
- 你甚至可以使用es7functionasynchronous/等待 ,这将有望使未来的一切过时。
缺点callback。 那么……他们曾经是延续 ,没有编译器devise师甚至想到直接打扰语言用户。 然后node.js来了,现在每个人都编写不可读的 嵌套函数调用(甚至没有想到debugging),不提供error handling的方式 (除了err
作为第一个参数的事实标准callback),并且不能和同调代码交互。