【问题标题】:Get the correct loop value during callbacks在回调期间获取正确的循环值
【发布时间】:2014-01-21 07:27:57
【问题描述】:

我正在尝试轮询多个站点,但是当我尝试打印数组索引时,它不会返回真正的索引。

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

什么问题?

【问题讨论】:

    标签: node.js for-loop callback


    【解决方案1】:

    您正在循环中执行异步函数调用。这意味着在处理请求时循环将继续,并会导致错误的循环索引。

    如果您想获得正确的索引,您必须使函数调用同步,或者您必须控制函数的流程。

    您可以使用模块 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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 2017-07-23
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多