我正在测试async.parallel函数调用的回调:如果回调使用参数或没有参数,似乎执行流程不同。
var async = require("async");
function makeTestFunction(i) {
return function(callback) {
console.log('test Function: '+i);
return callback();
};
}
function test(callback) {
var endFunctions = function(i) {
console.log('ending: ' + i);
return callback();
};
var testFunctions = [];
for (var i=0; i < 3; i++) {
console.log('loop: '+i);
testFunctions.push(makeTestFunction(i));
}
return async.parallel(testFunctions, endFunctions );
}
test( function() {
console.log('--------------- end test 1');
});
// loop: 0
// loop: 1
// loop: 2
// test Function: 0
// test Function: 1
// test Function: 2
// ending: null
// --------------- end test 1
结果就是我所期望的:在所有函数完成后调用'endFunctions'回调。
现在我希望匿名函数回调返回一个值:
var async = require("async");
function makeTestFunction(i) {
return function(callback) {
console.log('test Function: '+i);
return callback(i);
};
}
function test(callback) {
var endFunctions = function(i) {
console.log('ending: ' + i);
return callback();
};
var testFunctions = [];
for (var i=0; i < 3; i++) {
console.log('loop: '+i);
testFunctions.push(makeTestFunction(i));
}
return async.parallel(testFunctions, endFunctions );
}
test( function() {
console.log('--------------- end test 2');
});
// loop: 0
// loop: 1
// loop: 2
// test Function: 0
// test Function: 1
// ending: 1
// --------------- end test 2
// test Function: 2
阅读async.parralel manual,我预料到:
拜托,有人可以解释发生了什么以及出了什么问题吗?
答案 0 :(得分:2)
回调签名有什么问题。 对于async.parallel,回调必须有两个参数(错误,结果)。
以下代码给出了正确的结果:
var async = require("async");
function makeTestFunction(i) {
console.log('make function: '+i);
return function(callback) {
console.log('test Function: '+i);
return callback(null, i);
};
}
function test(callback) {
var endFunctions = function(err, result) {
console.log('ending: ' + result);
return callback();
};
var testFunctions = [];
for (var i=0; i < 3; i++) {
(function (k) {
testFunctions.push(makeTestFunction(k));
})(i);
}
return async.parallel(testFunctions, endFunctions );
}
test( function() {
console.log('--------------- end test 2');
});
// make function: 0
// make function: 1
// make function: 2
// test Function: 0
// test Function: 1
// test Function: 2
// ending: 0,1,2
// --------------- end test 2
&#13;