如何在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); }
看看这个模块,我想这是你要找的东西: