私はURLを反復してリンクがアクティブかどうかをチェックするためにasync.forEachを使用しています。Nodejs Async Js:async.forEachとasync.mapを使用してURLを検証する
newLinksは、私はすべての要求が処理された後のように期待してい {www.google.com、www.nourl.com、www.xyz.com}のようなリンクが含まれています、私は実行する機能が欲しいです、 「非同期完了」を表示します。
しかし、コンソールは、以下の結果を与えている: 「www.google.comがアップしている」、そして 「非同期で完了」、そして 「「完了」とfunally二つのリンク www.nourl.comがアップしています"と " www.xyz.comがアップ "
これは基本的にここで、最初のURL要求の後、私のコードは、非同期ループの外で関数を実行しています。私は、非同期は、すべてのURLが検証された後にのみ、次のコードを実行できるようにすると考えました。
async.forEach(webservicelinks, function(url, callback) {
var Url = "url";
var newLink = newLinks[0];
var proxiedRequest = request.defaults({'proxy': Url});
proxiedRequest(url , function (error, response, body) {
if(error){
console.log('Err: '+ error);
}
if (!error) {
if(response.statusCode == 200 || response.statusCode == 201 || response.statusCode == 202){
console.log(url + ' is up!!');
newLink.isActive = true;
}
if(response.statusCode == 301 || response.statusCode == 302){
console.log(url + ' is redirecting us!!');
return false;
}
if(response.statusCode == 401){
console.log("you are unauthorized to " + link);
return false;
}else if (!(response.statusCode == 200 || response.statusCode == 201 || response.statusCode == 202)){
console.log(url + ' is down!!');
}
}
});
callback();
} , function(err, newLinks) {
console.log ("Async Done") ;
});
console.log ("Done") ;
});
ありがとうございますが、validateLinkメソッドでurlとcb以外の他のパラメータを渡すにはどうすればよいですか? 私はlinkDataList(linkUrlとlinkStatusを含むlinkData - >の配列で、linkUrlが動作している場合はlinkStatusをtrueに設定したい)のリスト全体を渡したいのですか? – Amal
オブジェクトを渡すことはできますか?私は答えを編集しました。 – Ozgur
こんにちはありがとう、私も同様でしたが、問題は最初のURLだけが検証され、残りは実行されていないようなものです。理由は分かりません。 – Amal