Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在回调期间获取正确的循环值_Node.js_For Loop_Callback - Fatal编程技术网

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);