node.js在执行'n'异步回调后执行函数

时间:2013-02-17 16:59:44

标签: node.js events asynchronous callback

我无法理解如何在执行' n '异步函数后执行回调,例如:

var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})
process.nextTick(function(){
    //do stuff
})

有没有办法在4个异步函数之后执行after4AsyncOperation而不必将函数写在另一个内部,例如:

    var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
    process.nextTick(function(){
        //do stuff
        process.nextTick(function(){
            //do stuff
            process.nextTick(function(){
                //do stuff
                after4Asyncoperation();
            })
        })
    })
})

2 个答案:

答案 0 :(得分:8)

我建议使用Caolan's Async之类的异步库。然后,您可以使用async.parallelasync.seriesasync.autoauto是最灵活的,但比其他人慢一点;在parallelseries之间进行选择需要更多关于您尝试做什么的信息 - 您的第一个示例是并行操作,但您的第二个示例是串联的。

但是,如果您不想使用库,则可以编写自定义内容。我会这样做:

var numFuncs = 4;
var callback = function(){
  numFuncs--;
  if(numFuncs == 0) {
    after4AsyncOperation();
  }
}
var after4AsyncOperation = function(){
    //do something...
}
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})
process.nextTick(function(){
    //do stuff
    callback();
})

这可以通过从我们期望调用回调的次数(numFuncs)开始倒计时,并在我们被调回正确次数时仅调用after4AsyncOperation

答案 1 :(得分:3)

您可以利用具有此功能的优秀async库以及许多其他不错的功能。要具体完成您要做的事情,您可以使用系列:

https://github.com/caolan/async#series

或平行:

https://github.com/caolan/async#parallel

两者之间的区别在于,系列一个接一个地运行所有功能,而并行运行所有功能。在任何一种情况下,都会在完成后进行回调,这就是你似乎想要完成的事情。