当前位置 : 主页 > 网页制作 > Nodejs >

node.js – Bluebird而不是Coa中的Co?

来源:互联网 收集:自由互联 发布时间:2021-06-16
似乎Bluebird在生成器/协程相关功能中重叠Co. Bluebird被认为具有出色的速度性能,所以为了讨论,(假设上述重叠前提是真的)如果想要在Koa(Node.js上下文)中替换Bluebird for Co,是否可以轻松地完
似乎Bluebird在生成器/协程相关功能中重叠Co. Bluebird被认为具有出色的速度性能,所以为了讨论,(假设上述重叠前提是真的)如果想要在Koa(Node.js上下文)中替换Bluebird for Co,是否可以轻松地完成而不会减少Koa的功能,如果是这样如何?

(我的猜测是它实际上无法完成,因为看起来Koa是在Co上构建的并且没有明确地暴露它,而是外观它.这样的替换似乎等于用Bootstrap中的其他东西替换jQuery)

首先,bluebird和co没有那样的可比性.你的意思是Bluebird.coroutine vs co(coroutine的缩写).

现在,Bluebird.coroutine和co之间的区别在于co只允许你产生一组特定的硬编码类型.虽然Bluebird.coroutine可以配置为支持产生任意类型,但是文档例如包含如何添加支持以产生thunk和回调的示例.

异步生成器是如此微不足道,以至于实现之间可能存在的唯一差异是您可以产生哪些类型以及它们如何执行.没有多大的空间可以变得更好或更糟.

然而bluebird.coroutine只是蓝鸟功能的一小部分.

生成器只解决了使一系列动作不那么冗长的问题.有许多有用的功能可用于更高级的需求,如资源管理,并发协调,错误处理,取消超时和长堆栈跟踪,如果您只有由thunks / callbacks / minimal promises提供支持的异步生成器,则无法或极其痛苦.

您可以通过配置co支持的所有yield类型然后只使用bluebird.coroutine来替换co;

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

然而,这实际上没有任何意义,因为很少有代码实际上应该直接在您的请求处理程序中运行 – 请求处理程序调用的函数也可以.而这些功能并没有得到koa的帮助(嗯那么koa的重点又是什么?:D),所以它们可以直接成为蓝鸟协程.

网友评论