2016-09-27 5 views
0

完全array2.foreach前ので、この結果はノード要求マルチスレッドの問題

http://www.google.com 
http://www.amazon.com 
http://www.apple.com 
1 
2 
. 
. 

で2番目の項目(』 http://www.amazon.com」) を開始するが、要求がサポートスレッドですが、私はなりたい

http://www.google.com 
1 
2 
3 
. 
. 
http://www.amazon.com 
1 
2 
. 
. 

MyCode

var async = require('async'); 
var request = require('request'); 

var array1 = ['http://www.google.com', 'http://www.amazon.com', 
'http://www.apple.com']; 
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 

array1.each(function (item, callback) { 

    console.log(item); 
    aa(item, callback) 

}) 

function aa(url) { 

    request(url, function (err, res, html) { 
     array2.forEach(function (item, callback) { 
      //This part Current Page crawling 
      console.log(item); 
      sleep(1000); 
     }); 
    }) 
} 

どうすればいいですか?

+0

あなたはあなたのすべてのリクエストを非ブロックにしますか?つまり、これらの3つのサイトを非同期でクロールしますか? –

答えて

0

asyncモジュールを追加しましたが、未使用です。あなたはそれを使用する必要があります、あなたのニーズを達成するためにasync.eachSeries()関数を使用することがあります。ここにあなたを助けるかもしれないコードがあります

var async = require('async'); 
var request = require('request'); 

var array1 = ['http://www.google.com', 'http://www.amazon.com', 
'http://www.apple.com']; 
var array2 = [1, 2, 3, 4, 5, 6, 7, 8, 9]; 

function aa(url, callback) { 

    request(url, function (err, res, html) { 
     async.eachSeries(array2, function iteratee(item, callback2) { 
      console.log(item); 
      setTimeout(function() { 
       callback2(null); 
      }, 1000); 
     }, function done() { 
      callback(null) 
     }); 
    }) 
} 

async.eachSeries(array1, function iteratee(item, callback) { 
    console.log(item); 
    aa(item, callback) 
}, function done() { 
    console.log('completed'); 
}); 
+0

ありがとう –

関連する問題