0

我正在尝试定期从外部 API 加载一些数据,如下所示:

setInterval(function() {
  getData();
}, 60000);

function getData() {
  if (typeof someObject.data === 'object') {
    for (var prop in someObject.data) {
      if (prop === 1 || prop === 2) {
        var options = {
          host: 'somehost.com',
          path: '/somepath?param=' + prop
        };
        var req = http.request(options, function(res) {
          // EXECUTION NEVER REACHES THIS POINT ?!?!
          req.on('end', function() { alert('ended'); });
        });
        req.end();
      }
    }
  }
}

如果我不做任何间隔和循环,那么对同一主机的这样的请求就可以完美地工作。但是,如果我尝试执行如上所示的操作,则请求永远不会调用其回调函数。

我在这里做错了什么?

4

1 回答 1

1

我认为您的条件之一很糟糕,以下对我来说很好。

var http = require('http');

setInterval(function() {
  getData();
}, 1000);

function getData() {
  console.log('get');
  //if (typeof someObject.data === 'object') {
    console.log('get 1');
    //for (var prop in someObject.data) {
      console.log('get 2');
      //if (prop === 1 || prop === 2) {
        console.log('get 3');
        var options = {
          host: 'google.com',
          path: '/'
        };
        var req = http.request(options, function(res) {
          console.log('http request', res.statusCode);
          //req.on('end', function() { 
          //  console.log('ended', req); 
          //});
        });
        req.end();
      //}
    //}
  //}
}

如果我是对的,你不需要req.on('end'),请求的回调在完成时调用。你也可以使用http.get,所以你不需要调用req.end

    var req = http.get( options.host, function(res) {
      console.log('http request', res.statusCode);
      //req.on('end', function() { 
      //  console.log('ended', req); 
      //});
    }).on('error', function( e ) {
      console.error( 'error', e );
    }) 

文档中查看更多信息

希望我能帮上忙。

于 2013-04-24T07:43:54.347 回答