Koa/Co/Bluebird或Q/Generators/Promises/Thunks相互作用? (Node.js)

我正在研究构建一个web应用程序,部分与Koa,但我不知道如何选择和应用范围内的支持“异步更容易”技术/方法的范围,下面列出)。

总的来说,关于这个问题的网络上的不同的指导仍然使得模糊,特别是在演变的最佳实践,或者至少更好的实践,以及在什么情况下。在网上似乎有一点或没有什么,把它全部在上下文。

我希望对这个大屁股蔓延的职位的反应可以纠正这一点。也许下面的问题可以激发人们写一个彻底的博客文章等来解决这个问题。我的感觉是,我甚至不接近唯一一个谁会从中受益。

所以,如果明亮的社区可以帮助回答和澄清以下关于下面列出的技术(以粗体显示)的问题,我将很高兴:

— a) How,and under what circumstance (as applicable) are they complements,supplements,substitutes,and/or overlapping solutions to one another?

— b) What are their trade-offs in respect to speed-performance,error handling ease,and debugging ease?

— c) When,where,and why may it be better to use “this” versus “that” technology,technologies-combo,and/or approach?

— d) Which technologies or approaches,if any,may be “dimming stars”.

(希望作为答案一部分的意见可以很好地解释。)

==============================

技术:

* Koa *

我的理解:

Koa is a minimal foundation for build Node apps geared for taking advantage of ECMAScript-6 features,one feature in particular being generators.

* Co *

我的理解:

— Co is a library of utilites for running ECMAScript-6 generators (which are native to Node .011 harmony),with the goal to allieve some/much(?) of the need to write boilerplate code for running and managing generators.

— Co is intrinsically part of Koa(?).

具体问题:

— If and how does one use Co differently in Koa than in a non-Koa context. In other words,does Koa wholly facade Co?

— Could Co be replaced in Koa with some other like generator library if there is/was a better one? Are there any?

* Promise库,如“Q”和Bluebird *

我的理解:

— They are in a sense “polyfills” for implmententing the Promises/A+ spec,if and until Node natively runs that spec.
— They have some further non-spec convenience utilities for facilitating the use promises,such as Bluebird’s promisfyAll utility.

具体问题:

— My understanding is the ECMAScript-6 spec does/will largely reflect the Promises/A+ spec,but even so,Node 0.11v harmony does not natively implement Promises. (Is this correct?) However when it does,will technologies such as Q and Bluebird be on their way out?

— I’ve read something to the effect that “Q” and Bluebird support generators. What does this mean? Does it mean in part that,for example,they to some degree provided the same utility as Co,and if so to what degree?

* Thunks和Promises *

I think I have an fair handle on what they are,but hoping someone can provide a succinct and clear “elevator pitch” definition on what each is,and of course,as asked above,to explain when to use one versus the other — in a Koa context and not in it.

具体问题:

— Pro and cons to using something like Bluebird’s promisfy,versus say using Thunkify (github com/visionmedia/node-thunkify)?

==============================

为了给这篇文章及其问题一些进一步的上下文,如果在以下网页中提出的Koa技术可以讨论和对比(特别是基于利弊),这可能是有趣的:

— a) www.marcusoft . net/2014/03/koaintro.html (Where’s the thunks or promises,or am I not seeing something?)

— b) strongloop . com/strongblog/node-js-express-introduction-koa-js-zone (Again,where’s the thunks or promises?)

— c) github . com/koajs/koa/blob/master/docs/guide.md (What does the “next” argument equate to,and what set it and where?)

— d) blog.peterdecroos . com/blog/2014/01/22/javascript-generators-first-impressions (Not in a Koa context,but presents the use of Co with a promise library (Bluebird),so I’m assuming the technique/pattern presented here lends itself to usage in Koa(?). If so,then how well?

谢谢大家!

解决方法

我已经工作几乎广泛与发电机一个月了,所以也许我可以采取刺激在这。我会尽量保持最小的意见。希望它有助于澄清一些混乱。

缺少最佳实践和更好的解释的部分原因是,该功能在JavaScript中仍然是新的。还有很少的地方,你可以使用生成器node.js和firefox是最突出的,虽然firefox偏离标准一点。

我想注意,有一些工具,如traceur和regenerator,将让你使用它们的开发,并允许你把它们变成半等效的ES5,所以如果你发现工作与他们愉快,那么没有理由不开始使用它们,除非您定位的是古老的浏览器。

发电机

生成器最初并不被认为是处理异步控制流的一种方式,但是它们工作的非常好。生成器本质上是迭代器函数,允许通过使用yield来暂停和恢复它们的执行。

yield关键字本质上说,返回这个值的迭代,我会在我离开当你再次调用next()我离开的地方。

生成器函数是特殊函数,因为它们在第一次调用时不会执行,而是返回一个具有几个方法的迭代器对象,以及用于for-of循环和数组推导的能力。

send():这将一个值发送到生成器,将其作为yield的最后一个值,并继续下一次迭代

next():这将继续下一次迭代的生成器

throw():这引发一个异常INTO生成器,使生成器抛出异常,就像它来自最后一个yield语句。

close():这迫使生成器返回执行并调用生成器的任何最终代码,这允许在需要时触发最终错误处理。

他们的能力被暂停和恢复是什么使他们在管理流量控制如此强大。

Co

Co是围绕发电机的能力,使处理流控制更容易。它不支持所有的事情,你可以做的发电机,但你可以使用它们的大部分通过它的使用更少的样板和头痛。并且为了流控制目的,我没有发现我需要什么以外的什么co提供已经。虽然公平我没有尝试发送一个值到流发生器在流控制,但确实带来一些有趣的可能性….

还有其他的发电机库,有一些,我可以想到,从我的头顶是暂停,并发电运行。我已经尝试过它们,并提供最大的灵活性。暂停可能会更容易遵循,如果你不习惯发电机,但我不能说,有权威。

至于节点和最佳实践,我想说,目前,co正在赢得双手与已创建的支持工具的数量。暂停最可能的亚军。

Co与promises和thunk,它们用于yield语句,所以co知道什么时候继续执行生成器,而不是手动调用next()。 Co还支持使用发电机,发电机功能,对象和数组进行进一步的流量控制支持。

通过产生数组或对象,可以对所有产生的项执行并行操作。通过屈服于发生器或发生器函数,co将委托进一步的调用到新的发生器,直到它完成,然后恢复调用下一个当前发生器,允许你有效地创建非常有趣的流控制机制与最小的样板代码。

承诺

虽然我说我会保持最低的意见,我想说,对我来说,承诺可能是最难的理解。他们是一个强大的维护代码的工具,但他们很难掌握的内部工作,如果用于先进的流量控制,可以带来相当多的困难。

我可以想到的解释promise的最简单的方法是,它们是由保持函数状态的函数返回的对象,以及在对象的特定状态被输入时调用的回调列表。

承诺图书馆自己不会很快到任何地方。他们添加了大量的好东西的promises包括done()没有使它进入ES6规格。更不用提的事实是,相同的库可以在浏览器上使用,在节点,我们会有他们很长一段时间。

Thunks

Thunks只是函数,它接受单个参数回调并返回它们包装的另一个函数。

这将创建一个闭包,允许调用代码实例化在其回调中传递的函数,以便在方法完成时可以被告知。

Thunks是相当直接的理解和使用在我看来,但他们不是一切的正确工具。例如,spawn是创建thunk的主要痛苦,你可以做到,但它不容易。

Thunks vs. Promises

这些不是相互排斥的,可以容易地一起使用,但通常更好的是你的理智选择一个,坚持它。或者至少选择一个约定,所以你可以很容易地知道是哪个。 Thunks从我的经验运行得更快,但我没有基准。这大部分可能是因为它是一个较小的抽象,没有内置的错误处理机制。

你通常会构建一些需要错误处理的东西,因此thunk的整体性能增益可以很容易地取决于你的代码,或者赞成promises。

何时使用

生成器 – 当你可以安全地说你的应用程序将能够运行在流血的边缘,无论是firefox只为浏览器或节点> 0.11.3

我已经使用它们广泛地在我现在的公司,并不能与他们允许的控制流机制和懒惰评价更快乐。

承诺vs. Thunk – 这是真正由你和你与每个工作舒适。他们不提供相同的好处,也不解决同样的问题。 Promises帮助直接处理异步问题,thunks只是确保一个函数获取所需的回调参数,以便其他代码传入。

你可以一起使用它们,只要你能保持它,以便它是显而易见的,你不会有一个问题。

承诺/ Thunks与发电机 – 我建议这样做任何时候你使用发电机的控制流。这不是必要的,但它更容易,就像使用co作为一个抽象的控制流与发电机更容易。更少的代码键入,更容易维护,和更少的可能性,你会遇到一个边缘情况下,其他人还没有遇到。

Koa

我不打算谈谈关于koa的很多细节。只是说它是类似于express,但写的是利用生成器。这确实给它一些独特的优势,如更容易的错误处理和级联中间件。有办法完成所有这些任务之前,但他们不优雅,有时不是最高效。

特别注意:发电机打开了一扇可能性的门,我们真的还没有探索。就像它们可以用于控制流,当它不是他们的初始设计我积极他们可以用来解决很多其他问题,我们通常在JavaScript中有问题。它可能会比我更聪明的头脑,找到我们如何可以使用他们,但我至少开始玩弄他们,并更好地了解他们的能力。发电机还有更多的好处在ES.next。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


这篇文章主要介绍“基于nodejs的ssh2怎么实现自动化部署”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于nodejs...
本文小编为大家详细介绍“nodejs怎么实现目录不存在自动创建”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs怎么实现目录不存在自动创建”文章能帮助大...
这篇“如何把nodejs数据传到前端”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这...
本文小编为大家详细介绍“nodejs如何实现定时删除文件”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs如何实现定时删除文件”文章能帮助大家解决疑惑...
这篇文章主要讲解了“nodejs安装模块卡住不动怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来...
今天小编给大家分享一下如何检测nodejs有没有安装成功的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文...
本篇内容主要讲解“怎么安装Node.js的旧版本”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎...
这篇“node中的Express框架怎么安装使用”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家...
这篇文章主要介绍“nodejs如何实现搜索引擎”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs如何实现搜索引擎...
这篇文章主要介绍“nodejs中间层如何设置”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“nodejs中间层如何设置”文...
这篇文章主要介绍“nodejs多线程怎么实现”,在日常操作中,相信很多人在nodejs多线程怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
这篇文章主要讲解了“nodejs怎么分布式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“nodejs怎么分布式”...
本篇内容介绍了“nodejs字符串怎么转换为数组”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情...
这篇文章主要介绍了nodejs如何运行在php服务器的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇nodejs如何运行在php服务器文章都...
本篇内容主要讲解“nodejs单线程如何处理事件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“nodejs单线程如何...
这篇文章主要介绍“nodejs怎么安装ws模块”,在日常操作中,相信很多人在nodejs怎么安装ws模块问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
本篇内容介绍了“怎么打包nodejs代码”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!
本文小编为大家详细介绍“nodejs接收到的汉字乱码怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs接收到的汉字乱码怎么解决”文章能帮助大家解...
这篇“nodejs怎么同步删除文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇...
今天小编给大家分享一下nodejs怎么设置淘宝镜像的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希