首先,bluebird和co没有那样的可比性.你的意思是Bluebird.coroutinevs co(coroutine的缩写).
现在,之间的区别Bluebird.coroutine,并co是co唯一可以让你得到一组特定的硬编码类型.虽然Bluebird.coroutine可以配置为支持产生任意类型,但是文档例如包含如何添加支持以产生thunk和回调的示例.
异步生成器是如此微不足道,以至于实现之间可能存在的唯一差异是您可以产生哪些类型以及它们如何执行.没有多大的空间可以变得更好或更糟.
然而bluebird.coroutine,只是蓝鸟功能的一小部分.
生成器只解决了使一系列动作不那么冗长的问题.有许多有用的功能可用于更高级的需求,如资源管理,并发协调,错误处理,取消+超时和长堆栈跟踪,如果您只有由thunks/callbacks/minimal promise提供支持的异步生成器,这些内容是不可能或极其痛苦的.
您可以co通过配置所有支持的yield类型来进行替换,然后只使用bluebird.coroutine:
var co = require("bluebird").coroutine;
// Configure all yield types you need using co.addYieldHandler
// See documentation for examples
module.exports = co;
Run Code Online (Sandbox Code Playgroud)
然而,这实际上没有任何意义,因为很少有代码实际上应该直接在您的请求处理程序中运行 - 请求处理程序调用的函数也可以.而这些功能并没有得到koa的帮助(嗯那么koa的重点又是什么?:D),所以它们可以直接成为蓝鸟协程.
| 归档时间: |
|
| 查看次数: |
2230 次 |
| 最近记录: |