我正在使用async.forEach迭代我的网址以检查链接是否有效。
newLinks 包含{ www.google.com,www.nourl.com,www.xyz.com }等链接 我希望在处理完所有请求之后,我想要一个执行的函数,它会打印“Async Done”。
但是控制台给出了以下结果: 那么“www.google.com就是了” “Async Done”,然后 两个链接“完成”和有趣的 “www.nourl.com已上线”并且 “www.xyz.com已上线”
所以基本上在这里,在第一个url请求之后,我的代码是在异步循环之外执行函数。我认为async只允许下一段代码在所有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") ;
});
答案 0 :(得分:1)
您可能希望使用eachOfSeries
的{{1}}方法。我将您的代码划分为函数以提高可读性:
async.js