2016-07-22 8 views
1

私は、この特定の課題に苦労しています: - あなたは、各によってあなたに提供する完全なコンテンツを収集する必要がありますジャグリング非同期#9挑戦 - あなたのノード(非同期コールバック)を学び

行使9 URLを編集してコンソールに出力します(stdout)。長さを出力する必要はなく、データは文字列として出力するだけです。 URLごとに1行。キャッチは、URLがコマンドライン引数として提供されるのと同じ順序でそれらを出力しなければならないということです。 - それは検索されたURLの順に出力している私は間違っている場所を把握することができないよう

var http = require('http'); 
 
var bl = require('bl') 
 
var results = []; 
 
var count = 0 
 

 
function getURLs() { 
 
    var urls = [] 
 
    for(var i = 2; i < process.argv.length; i++){ 
 
    urls.push(process.argv[i]); 
 
    } 
 
    return urls 
 
} 
 

 
function getHTTP(url){ 
 
    http.get(url, function(response){ 
 
    response.pipe(bl(function(err,data){ 
 
     if(err){return console.error(err)} 
 
     results[count] = data.toString(); 
 
     count ++; 
 
     if (count === process.argv.length - 2){ 
 
     printAll() 
 
     } 
 
    })) 
 
    }) 
 
} 
 

 
function printAll(){ 
 
    for(var i = 0 ; i < results.length; i++){ 
 
    console.log(results[i]) 
 
    } 
 
} 
 

 
function start(){ 
 
    retrivedURL = getURLs() 
 
    for(var i = 0; i < retrivedURL.length; i++){ 
 
    getHTTP(retrivedURL[i]) 
 
    } 
 
} 
 

 
start()

は、ここに私のコードです。

+1

ループやそのような非同期関数を使用することはできず、順序を維持することを期待しているので、非同期に非同期呼び出しをシーケンスする必要があります。継続継承スタイルの1つの方法は、ループの代わりに再帰を使用する方法です。もう1つの選択肢は、約束を使用してシーケンスすることです。 – elclanrs

答えて

1

この目的のためにasync.eachSeriesを使用することができます。つまり、このURLを非同期呼び出しにすることができます。これはよく説明されているhereです。

関連する問題