URLの配列をループし、一連のURLから応答を取得してレスポンスURLを処理しようとしています。コードでは、内側のリクエストをすべて完了した後に外側のループを入力し、その結果を以下のようにしたいと思います。でURLをチェックノード。 js複数のHTTPリクエストを含むネストされた非同期マップ
:https://stackoverflow.com 状態200は を行って.... ....でURLをチェック :https://example.com ..... ..... .....
合計リンク#20
しかし、私のコードでは、要求が完了する前に外側ループが終了しています。
const getHrefs = require('get-hrefs');
const async = require("async");
var req = require('request-promise');
var errors = require('request-promise/errors');
var pageUrls = ['https://stackoverflow.com','https://www.exsample.com'];
testUrls='';
async.map(pageUrls, function(pageUrl,callback){
//process itemA
req(pageUrl, function (err, response, body) {
console.log(pageUrl, " STATUS: ", response.statusCode);
if (err){
return callback(err);
}
else {
testUrls= getHrefs(response.body);
async.map(testUrls, function(testUrl,callback1){
linkCount++;
req(testUrl).catch(errors.StatusCodeError, function (reason) {
brokenLinks++;
console.log("URL: "+ testUrl+ "reason: "+ reason.statusCode);
})
.catch(errors.RequestError, function (reason) {
}).finally(function() {
});
return callback1();
},function(err){
callback();
}) ;
}
})
} ,function(err){
console.log("OuterLoopFinished");
console.log('*************************************************************' + '\n');
console.log('Check complete! || Total Links: ' + linkCount + ' || Broken Links: ' + brokenLinks);
console.log('*************************************************************');
});
あなたは 'callback1'をあまりに早く呼び出しています。 'finally'ブロックの中に入れてみてください。 – IronGeek
最後のコールバック関数(outerloopfinished)で終わっていないあなたの返事に感謝します。 – sanavstars
'callback1'の呼び出しは内部の' async.map'実行の終わりをマークします(各 'testUrls'アイテム用)。 'async.map(testUrls ...'の完了は 'async.map'の各外側の' async.map'実行の終了を示す 'callback'を呼び出します)' async.map(pageUrl .. 'outerloopfinished'関数を呼び出しています... – IronGeek