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



所以我最近听到了很多关于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的性能?

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

看看这个:

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

有一些项目旨在将这种风格引入 Node.js。IcedCoffeeScript是CoffeeScript的一个分支,就是一个例子(但需要你编写CoffeeScript)。另一个是节点光纤。

就个人而言,我一直在尝试使用IcedCoffeeScript(因为我已经在使用CoffeeScript),它似乎工作得很好(请参阅我之前和之后的示例),但是调试CoffeeScript有点痛苦,尽管下一个版本的CoffeeScript应该具有源代码映射支持,希望这将使这更容易。

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

该库目前处于测试阶段,但它很稳定,几乎支持所有语句(例如循环、开关、if),并且可以很好地与现有库(如 jQuery)配合使用。

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

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

jsfiddle上的工作示例。

您可以从 github 下载该库。

最新更新