我有以下代码段:
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。所有executeOtherFunction
来电完成后如何致电asyncFunction
?
答案 0 :(得分:2)
使用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
)和一个回调)
答案 1 :(得分:2)
如果asyncFunction
的实施方式如下:
function asyncFunction(n) {
process.nextTick(function() { /* do some operations */ });
}
然后你无法知道asyncFunction
何时实际执行,因为它离开了callstack。所以它需要在执行完成时通知。
function asyncFunction(n, callback) {
process.nextTick(function() {
/* do some operations */
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);
}
答案 2 :(得分:1)
看一下这个模块,我认为这就是你要找的东西: