什么是Node.js相当于Python的gevent?

时间:2014-05-13 14:15:34

标签: node.js

我正在尝试学习Node.js,既用于webapp开发,也用于小系统脚本。使用Python,我们有这个库gevent实现了greenlets和猴子补丁Python STD库,所以你可以编写同步代码,它可以像异步一样工作。

是否有类似的东西,但对于Node?我已经阅读过async和Fibers,但我不明白这是否是类似的方法。

1 个答案:

答案 0 :(得分:0)

通过查看gevent文档中的第一个示例,您正在寻找generators,这是一个前沿功能。您可以通过在支持节点版本中传递--harmony_generators来使用它们(目前不稳定的0.11)。

使用本机生成器并不难,但我建议使用co module。自述文件中的一个例子:

co(function *(){
  var a = get('http://google.com');  // an async process
  var b = get('http://yahoo.com');   // an async process
  var c = get('http://cloudup.com'); // an async process
  var res = yield [a, b, c];         // wait until these are done in a
                                     // synchronous style.
  console.log(res);                  // log these objects
})()

其他更传统的选择是使用promises(存在多个库):

doSomeTaskThatReturnsAPromise()
    .then(somethingElse)
    .then(somethingElse)
    .then(function() { console.log("I'm done!") });

..或诸如async之类的库:

async.series([
    doSomeTask,
    somethingElse,
    somethingElse
], function() {
    console.log("I'm done!");
});

我对Fibers没有经验,但我相信它在概念上类似于Generators。