似乎Bluebird在生成器/协程相关功能中重叠了Co。 Bluebird被认为具有出色的速度性能,所以为了讨论,(假设上述重叠前提是真的)如果想要在Koa(Node.js上下文)中替换Bluebird for Co,是否可以轻松地完成而不减少Koa的功能,如果是这样如何?
(我的猜测是它实际上无法实现,因为看起来Koa是在Co上构建的并且没有明确地暴露它,而是外观它。这样的替换似乎等于用Bootstrap中的其他东西替换jQuery )
答案 0 :(得分:8)
首先,bluebird和co没有那样的可比性。你的意思是Bluebird.coroutine
vs co
(coroutine的缩写)。
现在,Bluebird.coroutine
和co
之间的区别在于co
只允许您生成一组特定的硬编码类型。虽然Bluebird.coroutine
可以配置为支持产生任意类型,但文档中包含了如何添加支持以产生thunk和回调的示例。
异步生成器是如此微不足道,以至于实现之间可能存在的唯一差异是您可以产生哪些类型以及它如何执行。没有多大的空间可以变得更好或更糟。
然而bluebird.coroutine
只是蓝鸟特征的一小部分。
生成器只解决了使一系列动作不那么冗长的问题。有许多有用的功能可用于更高级的需求,如资源管理,并发协调,错误处理,取消+超时和长堆栈跟踪,如果您只有由thunks / callbacks / minimal promise支持的异步生成器,那么这些内容是不可能或极其痛苦的。 / p>
您可以通过配置所有支持的收益类型然后只使用co
来替换bluebird.coroutine
:
var co = require("bluebird").coroutine;
// Configure all yield types you need using co.addYieldHandler
// See documentation for examples
module.exports = co;
然而,这并没有任何意义,因为很少有代码实际应该直接在您的请求处理程序中运行 - 请求处理程序调用的函数也可以。而这些功能并没有得到koa的帮助(嗯那么koa又有什么意义呢?:D),所以它们可以直接成为蓝鸟协程。
答案 1 :(得分:-5)
esailija对蓝鸟说了这个,
那说,我不相信他。并且,我不相信蓝鸟包装比Co更快 - 如果这样的事情是可能的话。 Co.js工作,并且目前无法让Bluebird.js通过测试。如果您使用的是ES6,请完全忽略Bluebird并使用Co。正在添加一项功能,不仅可以产生回调,thunk等,还可以让你想到任何随意的事情。蓝鸟也是最快的。所以在这个版本之后,koa应该只是使用蓝鸟。见https://github.com/petkaantonov/bluebird/issues/131#issuecomment-36975495