Node.js 在回调期间获取正确的循环值
我尝试轮询多个站点,但当我尝试打印数组索引时,它不会返回真正的索引Node.js 在回调期间获取正确的循环值,node.js,for-loop,callback,Node.js,For Loop,Callback,我尝试轮询多个站点,但当我尝试打印数组索引时,它不会返回真正的索引 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], functio
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);
var request=require('request');
var opt=['https://dev.twitter.com','https://developer.foursquare.com/','https://developers.facebook.com'];
函数req()
{
对于(i=0;i您正在循环中执行异步函数调用。这意味着在处理请求时循环将继续,并将导致错误的循环索引
如果要获得正确的索引,必须使函数调用同步,或者必须控制函数流
您可以使用模块执行此操作
这里有一个例子
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);