nodejs async.parallel递归

时间:2016-12-13 09:23:25

标签: javascript node.js async.js

我用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);

有人可以解释第二次测试没有给出预期结果吗?

感谢您的帮助。

1 个答案:

答案 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,当然