具有Javascript同步接口的异步操作

时间:2012-06-07 18:58:50

标签: javascript node.js v8 eventlet

所以我最近听到很多关于node.js的消息。支持者似乎认为它是基督的第二次降临。这引起了我的兴趣,我决定阅读它。

我遇到了多个带有基准数字的来源,它显然在处理大量并发请求方面表现出色。但是,编写代码的“回调”方式对我来说感觉非常“不自然”。一些研究让我学习了Eventlet,它让我在编写看起来非常像同步的代码时进行异步操作(从而提高了我的工作效率)。

但Node.js似乎比Eventlet(http://codescience.wordpress.com/2011/09/05/non-blocking-io-node-js-and-pythons-eventlet)更强大。我假设它是因为V8 JS引擎。是否有Java / Javascript产品允许我在编写同步代码时执行异步操作,从而为我提供两全其美的优势 - 开发人员的工作效率以及JVM / V8的性能?

3 个答案:

答案 0 :(得分:1)

Node.js支持可以支持异步 - 等待语法,允许您使用同步代码运行异步操作

检查出来:

https://github.com/koush/node/wiki/%22async%22-support-in-node.js

答案 1 :(得分:1)

有一些项目旨在为Node.js带来这种风格。 IcedCoffeeScriptCoffeeScript的一个分支,是一个例子(但需要你编写CoffeeScript)。另一个是node-fibers

就个人而言,我一直在尝试使用IcedCoffeeScript(因为我已经使用过CoffeeScript),它看起来效果很好(请参阅我的before-and-after example),但调试CoffeeScript有点痛苦,尽管下一个版本CoffeeScript应该有源映射支持,希望这会使这更容易。

答案 2 :(得分:0)

您应该查看我的一个项目,它叫做sharpnr.js。 这也是使用await-async语法,但它是一个简单的JavaScript库,适用于每个浏览器。

该库目前处于测试阶段,但它很稳定,几乎支持所有语句(例如loop,switch,if),并且与现有库(如jQuery)配合使用。

语法几乎与C#版本相同:

var getAsync = async(function(url) {
  var result = await; $.get(url);
  $("#test").html(result);
});
getAsync("http://www.sharpnrjs.com");

jsfiddle上的工作示例。

您可以从github下载图书馆。