Node.js循环中的http.get响应

时间:2016-01-27 15:12:06

标签: node.js

所以我有以下代码。此代码必须创建3个图形,但仅创建1(最后):

for (var b=0; b<routers.length; b++)
 {
    for (var a=0; a<rout.length; a++)
    {
       if(something==something)
       {
           console.log("bla bla");
           var options = {
               host: 'xxx',
               path: '/xxxxx
               port: 'xxxx'}                    
            http.request(options).end();
            http.get(options, function (response) {
                response.setEncoding('utf8') 
                response.on('data', function (data) {
                    var responseArray = JSON.parse(data);
                    console.log("we get data. we create graph!!!"
                })         
           })
       }
    }
 }

因此,如果我运行脚本,我会得到第一个3x“bla bla”然后在这3x“我们得到数据之后。我们创建图表!!!”。我认为在我的情况下它必须是“bla bla”和“我们得到数据。我们创建图表!!!”等等3倍。我对吗??我是node.js的新手,所以请帮助我。

1 个答案:

答案 0 :(得分:0)

Promise是一个模式,用于执行此操作,而不是唯一的模式。他们是否是最好的模式在社区中受到很多争论。其他选项包括async.js和使用EventEmitter。对于这样的事情,我倾向于喜欢Async.js,但我已经使用了所有三种模式。我也更喜欢request.js到内置的http客户端,因为它更容易使用。

这是使用request.js和async.js的简单示例:

var request = require('request'),
    async   = require('async');

function iterator(router, next){
  var options = {}; // however  you build your options argument
  request.get(options, function(e, response, data){
     if(e) return next(e); // something went wrong with the request

     var json = null;
     try { json = JSON.parse(data); }
     catch (err){ next(err); // handle errors on parsing }

     // if you get here, parsing happened just fine. 
     console.log('parsed this router:');
     console.log(json);
     next(); 
  });
}

function handleFinalResults(e){
  if(e) return console.log('Dangit, ', e.message);
  console.log('Successfully got everything');
};

async.each(routers, iterator, handleFinalResults);