【发布时间】:2014-05-30 18:14:28
【问题描述】:
我正在研究部分使用 Koa 构建一个 Web 应用程序,但我不太了解如何、何时以及为什么在支持性“使异步更容易”技术之间进行选择 - 和应用 - 范围/方法(如下所列)。
总体而言,网络上关于这个主题的不同指导仍然使事情变得模糊,特别是在不断发展的最佳实践,或者至少是更好的实践方面,以及在什么情况下。网络上似乎很少或根本没有将这一切放在上下文中。
我希望对这个庞大的帖子的回复可以纠正这一点。另外,也许下面的问题可以激发某人写一篇详尽的博客文章或类似的文章来解决这个问题。我的感觉是,我什至不是唯一能从中受益的人。
因此,如果聪明的社区能够帮助回答并明确以下与下列技术相关的问题(粗体字),我将非常高兴:
-- a) 它们如何以及在何种情况下(如适用)相互补充、补充、替代和/或重叠解决方案?
-- b) 在速度-性能、错误处理的便利性和调试的便利性方面,它们的权衡是什么?
-- c) 何时、何地以及为什么使用“这个”与“那个”技术、技术组合和/或方法相比更好?
-- d) 哪些技术或方法(如果有)可能是“暗星”。
(希望答案中的观点能得到很好的解释。)
================================
技术:
* Koa *
我的理解:
Koa 是构建 Node 应用程序的最小基础,旨在利用 ECMAScript-6 功能,其中一个功能特别是生成器。
* 合作 *
我的理解:
-- Co 是一个用于运行 ECMAScript-6 生成器的实用程序库(它是 Node .011 和谐的本机),旨在减轻一些/很多(?)需要编写样板代码来运行和管理发电机。
-- Co 本质上是 Koa(?) 的一部分。
具体问题:
-- 如果以及如何在 Koa 中与在非 Koa 上下文中不同地使用 Co。换句话说,Koa 是不是全副武装?
-- 如果有/曾经有更好的生成器库,是否可以将 Koa 中的 Co 替换为其他类似的生成器库?有吗?
* Promise 库,例如“Q”和 Bluebird *
我的理解:
-- 在某种意义上,它们是用于实现 Promises/A+ 规范的“polyfills”,如果且直到 Node 原生运行该规范。
-- 他们还有一些非规范的便利实用程序来促进使用承诺,例如 Bluebird 的 promisfyAll 实用程序。
具体问题:
-- 我的理解是 ECMAScript-6 规范确实/将在很大程度上反映 Promises/A+ 规范,但即便如此,Node 0.11v 和谐并没有原生实现 Promises。 (这是正确的吗?)但是,当它出现时,Q 和 Bluebird 等技术会被淘汰吗?
-- 我读过一些东西,大意是“Q”和 Bluebird 支持生成器。这是什么意思?这是否在一定程度上意味着,例如,它们在某种程度上提供了与 Co 相同的效用,如果可以,达到什么程度?
* Thunks 和 Promise *
我想我对它们是什么有一个公平的处理,但希望有人可以提供一个简洁明了的“电梯间距”定义,当然,如上所述,解释何时使用一个与其他——在 Koa 上下文中而不是在其中。
具体问题:
-- 使用 Bluebird 的 promisfy 与使用 Thunkify (github com/visionmedia/node-thunkify) 之类的东西的优缺点?
================================
为了给这篇文章及其问题提供更多背景信息,如果可以讨论和对比以下网页中介绍的 Koa 技术可能会很有趣(特别是在优缺点的基础上):
-- a) www.marcusoft 。 net/2014/03/koaintro.html(thunk 或 promises 在哪里,或者我什么都没看到?)
-- b) 强循环。 com/strongblog/node-js-express-introduction-koa-js-zone(同样,thunk 或 promises 在哪里?)
-- c) github 。 com/koajs/koa/blob/master/docs/guide.md(“下一个”参数等同于什么,以及它的设置和位置?)
-- d) blog.peterdecroos 。 com/blog/2014/01/22/javascript-generators-first-impressions (不在 Koa 上下文中,但展示了 Co 与 Promise 库(Bluebird)的使用,所以我假设这里介绍的技术/模式借给自己在 Koa 中使用(?)。如果是这样,那么效果如何?
谢谢大家!
【问题讨论】:
-
Bluebird promisify with Bluebird coroutine for generator 是迄今为止最快的方法。它还恰好提供了目前具有长堆栈跟踪的最佳可调试性选项。我会说这是一个不错的选择。
-
另外,这就像一百万个问题。有些不错,有些过于基于意见。
-
Co 是 express 作者创建的用于轻松编写非阻塞代码的库。通常我们必须使用回调和异步函数,这会变得很难看。优雅地链接它们可能是一个挑战。在 express 中,服务器链接各种中间件。 Koa 就像 express 一样,是一个中间件。但它使用 co 来管理内部。问题是生成器很好,但它们是同步的。所以你需要承诺与他们合作。公司为你做这件事。
-
这不是 QA 而是讨论。因此它适合论坛,而不适合 SO。
-
@Connor 聊天室不会留下可用信息来帮助未来的观众
标签: node.js generator promise bluebird koa