如何在Node.js中同步呼叫

我有以下代码片段:

var array = [1, 2, 3]; var data = 0; for(var i=0; i<array.length; i++){ asyncFunction(data++); } console.log(data); executeOtherFunction(data); 

我期待数据的价值为3,但我认为它是由于asyncFunction 0。 所有asyncFunction调用完成后,如何调用executeOtherFunction

使用async.each

 var async = require('async'); var data = 0; var array = [ 1, 2, 3 ]; async.each(array, function(item, done) { asyncFunction(data++, done); }, function(err) { if (err) ... // handle error console.log(data); executeOtherFunction(data); }); 

(假设asyncFunction有两个参数,一个数字( data )和一个callback)

如果asyncFunction的实现如下所示:

 function asyncFunction(n) { process.nextTick(function() { /* do some operations */ }); } 

那么你将无法知道什么时候asyncFunction被实际执行,因为它离开了调用堆栈。 所以当执行完成时需要通知。

 function asyncFunction(n, callback) { process.nextTick(function() { /* do some operations */ callback(); }); } 

这是使用简单的callback机制。 如果你想用一个奇怪的模块来处理这个问题,请继续。 但是执行类似于基本callback的东西可能并不美观,但并不困难。

 var array = [1, 2, 3]; var data = 0; var cntr = 0; function countnExecute() { if (++cntr === array.length) executeOtherFunction(data); } for(var i = 0; i < array.length; i++){ asyncFunction(data++, countnExecute); } 

看看这个模块,我想这是你要找的东西:

https://github.com/caolan/async