nodejs循环async.parallelcallback

我正在testing一个由async.parallel函数调用的callback函数:如果callback函数使用参数或者没有,那么执行stream程似乎是不同的。

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 

结果是我所期望的:在完成所有function之后调用“endFunctions”callback函数。

现在我想要匿名函数callback来返回一个值:

 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手册 ,我预计:

  1. 在所有的匿名函数被终止后,callback'endFunctions'被调用一次
  2. callback'endFunctions'接收由匿名函数返回的所有值的数组。

请问,有人可以解释发生了什么,什么是错的?

callback签名有什么问题? 对于async.parallel,callback函数必须有两个参数(err,results)。

以下代码给出了正确的结果:

 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