蓝鸟,而不是Co在Coa?

似乎Bluebird与发生器/协程相关的function重叠。 蓝鸟被认为具有出色的速度性能,所以出于讨论的缘故(假设上述重叠前提是真实的),如果想在Koa中用Bluebird代替Co(Node.js上下文),是否可以很容易地完成而不会减lessKoafunction,如果是的话如何?

(我的猜测是不能实际完成的,因为Koa是build立在Co之上的,并且没有明确地暴露它,但是Facade它。这样的replace看起来就等于用Bootstrap中的其他东西来代替jQuery)

首先,bluebird和co是不可比拟的。 你的意思是Bluebird.coroutine vs co (简称协程)。

现在, Bluebird.coroutineco的区别是co只允许你产生一些硬编码types。 虽然Bluebird.coroutine可以configuration为支持产生任意types,但是文档例如包含了如何添加对产生thunk和callback的支持的例子。

asynchronous生成器是如此微不足道,只有不同的实现之间可以产生什么types,以及如何执行。 没有太多的空间好或坏。

然而bluebird.coroutine只是蓝鸟function的一小部分。

发电机只能解决减less操作顺序的问题。 对于更高级的需求,比如资源pipe理,并发协调,error handling,取消+超时以及长期堆栈跟踪,如果您只有通过thunk / callbacks / minimal promise支持的asynchronous生成器,这是不可能的或者非常痛苦的。


您可以通过configuration所有支持的yieldtypes然后使用bluebird.coroutine来替代co

 var co = require("bluebird").coroutine; // Configure all yield types you need using co.addYieldHandler // See documentation for examples module.exports = co; 

然而,这并没有什么意义,因为很less的代码实际上应该直接在你的请求处理程序中运行,而请求处理程序调用的函数却是这样做的。 而这些function并没有得到koa的帮助(嗯,koa又是什么意思呢?:D),所以它们可以直接成为蓝鸟协同程序。

esailija对Bluebird 这样说,

正在添加的一个function,不仅允许callback,thunk等,而是任何你想到的东西。 蓝鸟也是最快的。 所以在这个版本后,koa应该只是使用蓝鸟。 见https://github.com/petkaantonov/bluebird/issues/131#issuecomment-36975495

那就是说,我不相信他。 而且,我不相信一个蓝鸟包装会比Co更快 – 如果这样的事情是可能的。 Co.js的工作原理,目前无法让Bluebird.js通过testing。 如果您使用的是ES6,请完全忽略Bluebird并使用Co.