Node.js循环内的http请求

Node.js循环内的http请求,node.js,Node.js,我尝试定期从外部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 = {

我尝试定期从外部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();
      }
    }
  }
}
如果我不做任何间隔和循环,那么对同一主机的请求就可以完美地工作。但是,如果我尝试执行如上所示的操作,那么请求永远不会调用其回调函数


我在这里做错了什么?

我认为你的一个条件不好,下面的条件对我很好

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();
      //}
    //}
  //}
}
另外,如果我是对的,您不需要('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 );
    }) 
请参阅中的更多信息


希望我能帮上忙。

也许你的变量(someobject)不在范围内(未定义),你试过逐行调试它吗,看看是否所有的东西都定义好了吗?事实上,我也检查了someobject的类型=='object',只是为了更好的可读性,我没有把它包括在这里。它到达了发出请求的行,但从未返回。如果我去掉其他东西(setInterval和循环),一切都会完美执行。是的,似乎与环境/代码的其他部分有关。隔离测试运行良好。谢谢。你可以用一些模块简化你的代码。看看异步和请求