我没有得到node.js的库异步,我错了?

时间:2013-07-27 22:27:10

标签: node.js asynchronous

我尝试了很多在节点js中使用异步库但我最简单的测试甚至不起作用。

var async = require('async');

var i = 0 ;

var inc = function(){
    i++;
} ;

var show = function(){
    console.log(i) ;
} ;

var err = function(err){
    console.log(err) ;
} ;

async.forever(inc,err) ;
async.forever(show,err) ;

函数根本不循环,输出只是

1

请问我的错误。

1 个答案:

答案 0 :(得分:6)

async.forever()callback传递给他们需要致电的showinc

var inc = function(done){
    i++;
    setImmediate(done);
};

var show = function (done) {
    console.log(i);
    setImmediate(done);
};

使用setImmediate(或setTimeout)使调用异步,因此您不会收到堆栈溢出错误:

var inc = function(done){
    i++;
    done();
};
RangeError: Maximum call stack size exceeded

var inc = function(done){
                  ^

并且,请记住async库不会使任务异步;它假定任务已经是异步的,只是帮助管理它们。在大多数情况下,使用async的同步任务仍会阻止。