2016-12-13 14 views
0

私はnodejsでasync.parallelの動作をテストしています。 nodejs async.parallel recursion

var async = require("async"); 
 

 
function makeSleepFunction(i) { 
 
\t return function(callback) { 
 
\t \t setTimeout(function() { 
 
\t \t \t console.log(' + sleep '+i); 
 
\t \t \t callback(null, i); 
 
\t \t }, i); 
 
\t } 
 
} 
 

 
function parallel(i, callback) { 
 
\t // console.log('----parallel '+i+'-----') 
 
\t return async.parallel([makeSleepFunction(i), makeSleepFunction(i+10)], \t callback); 
 
} 
 

 
// Expected result OK: 100 before 10 
 
parallel(100, function(err, results) { 
 
\t console.log('async.parallel 1 done: '+results.toString()); 
 
\t parallel(10, function(err, results) { 
 
\t \t console.log('async.parallel 2 done: '+results.toString()); 
 
\t }); 
 
}); 
 

 
// Expected result KO: 100 after 10 
 
setTimeout(function() { // Wait the 1st test is finished 
 
\t console.log('\n\n***** The followig test des not give the expected result:') 
 
\t parallel(100, 
 
\t \t parallel(10, function(err, results) { 
 
\t \t \t console.log('async.parallel 2 done: '+results.toString()); 
 
\t \t }) 
 
\t); 
 
}, 300);

は、誰かが期待される結果が得られていない第二の試験で説明できますか?

ありがとうございました。

答えて

0

すべてのタスクが非同期に並行して待機します。あなたの仕事はiとi + 10のタイミングをとっています。最初の呼び出しでは、パラレルは110 msの最長スリープを待機します。 同じ理由で2回目の呼び出しが20ミリ秒間待機します。 2番目のテストでは、コールバックを渡すのではなく、すぐに新しい並列関数を呼び出すことになります。コードは、メッセージを書き込む前に最小110 + 20 = 130ms待機します。 この方法を試してみてください。

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

をしたり、第一の試験ではもちろん

+0

の、バインドを使用することができます(「OK結果をexpeted」)、100msのタスクは、10ミリ秒のtaksの前に実行されます。それは私が期待したものです。しかし、2番目のテスト( 'setTimeout ...')では、100msタスクは10msタスク後に実行されます。なぜか教えてくれますか ?ここでログがある:100,110 +行わ20 async.parallel 2眠る10 +スリープ:+行わ110 async.parallel 1スリープ100 +スリープ10,20 を***** followig試験は、DESではありません + 10 +行なわ20 async.parallel 2眠る眠る:期待される結果与える10,20 + 100 +私が見る110 [0.46sに仕上がり] – Roge

+0

を睡眠を睡眠を、私は私の答えを変更しました。問題は、パラレル(10 ...関数)を呼び出すことで、最初のパラレルの2番目のパラメタ – sarkiroka