我正在尝试轮询多个站点,但是当我尝试打印数组索引时,它不会返回真正的索引。
var request = require('request');
var opt=['https://dev.twitter.com','https://developer.foursquare.com/','https://developers.facebook.com'];
function req()
{
for(i=0;i<opt.length;i++)
{
request(opt[i], function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log("Yes "+i)
}
else
console.log("No");
})
}
}
setInterval(req,3000);
问题是什么?
答案 0 :(得分:2)
您正在循环中执行异步函数调用。这意味着循环将在处理请求时继续,并将导致错误的循环索引。
如果要获得正确的索引,则必须使函数调用同步,或者必须控制函数的流程。
您可以使用模块async
执行此操作这是一个例子。
var request = require('request')
, async = require('async');
var opt = ['https://dev.twitter.com','https://developer.foursquare.com/','https://developers.facebook.com'];
function req() {
var count = 0;
// Use async to loop each opt value in series
async.eachSeries(opt, function(entry, callback) {
count++;
request(entry, function(error, response, body) {
if (!error && response.statusCode == 200) {
console.log('Yes ' + count)
}
else {
console.log('No');
}
callback();
});
}, function(err) {
console.log('We are done!');
});
}
setInterval(req,3000);