有很多库和工具可以为您执行异步链接和控制流,它们主要有两个主要方面:
- 控制流库
例如,请参见async,seq和step(基于回调)或Q和future(基于承诺)。这些方法的主要优点是它们只是普通的JS库,可减轻异步编程的麻烦。
以我个人的经验,基于承诺的库倾向于导致代码看起来更像通常的同步代码,因为您使用“返回”返回值,并且由于可以传递和存储承诺值,因此类似于真实值。
另一方面,基于连续的代码则级别较低,因为它显式地 *** 纵代码路径。这可能可以允许更灵活的控制流以及与现有库的更好集成,但是也可能导致更多样板式和不太直观的代码。
- Javascript CPS编译器
扩展语言以添加对协程/生成器的本机支持,使您可以以非常直接的方式编写异步代码,并与其余语言配合使用,这意味着您可以使用Javascript
if语句,循环等,而无需使用函数复制它们。这也意味着将以前的同步代码转换为异步版本非常容易。但是,有一个明显的缺点,即并非每个浏览器都将运行您的Javascript扩展,因此您将需要在构建过程中添加一个编译步骤,以将代码转换为具有延续传递样式的回调的常规JS。无论如何,一种有前途的替代方法是Ecmascript
6规范中的生成器-
虽然到目前为止,只有Firefox本身支持它们,但仍有一些项目,例如regenerator和Traceur将其编译回回调。还有其他项目创建自己的异步语法(因为es6生成器当时还没有出现)。在此类别中,您将找到诸如tamejs和Iced
Coffeescript之类的东西。最后,如果您使用Node.js,也可以看看Fibers。
我的建议:
如果您只希望简单的东西不会使您的构建过程复杂化,那么我建议您使用最适合您的个人风格和已经使用的库的控制流库。
但是,如果您希望编写许多复杂且深度集成的异步代码,则强烈建议至少考虑使用基于编译器的替代方法。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)