我用nodejs测试async.parallel行为。
var async = require("async");
function makeSleepFunction(i) {
return function(callback) {
setTimeout(function() {
console.log(' + sleep '+i);
callback(null, i);
}, i);
}
}
function parallel(i, callback) {
// console.log('----parallel '+i+'-----')
return async.parallel([makeSleepFunction(i), makeSleepFunction(i+10)], callback);
}
// Expected result OK: 100 before 10
parallel(100, function(err, results) {
console.log('async.parallel 1 done: '+results.toString());
parallel(10, function(err, results) {
console.log('async.parallel 2 done: '+results.toString());
});
});
// Expected result KO: 100 after 10
setTimeout(function() { // Wait the 1st test is finished
console.log('\n\n***** The followig test des not give the expected result:')
parallel(100,
parallel(10, function(err, results) {
console.log('async.parallel 2 done: '+results.toString());
})
);
}, 300);
有人可以解释第二次测试没有给出预期结果吗?
感谢您的帮助。
答案 0 :(得分:0)
异步并行等待完成的每项任务。你的任务是定时i和i + 10。并行的第一个调用等待最长的睡眠,即110毫秒。 出于同样原因的第二次呼叫等待20 ms。 您的代码在写入消息之前等待最小110 + 20 = 130 ms:“async.parallel 2 done”
在第二个测试中,您没有传递回调,但您立即调用了一个新的并行函数。 试试这个:
setTimeout(function() { // Wait the 1st test is finished
console.log('\n\n***** The followig test des not give the expected result:')
parallel(100,function(){ //not call, but only declare a function
parallel(10, function(err, results) {
console.log('async.parallel 2 done: '+results.toString());
})
});
}, 300);
或者你可以使用bind,当然