在Expressjs中发出异步GET请求的问题

时间:2015-04-24 06:44:40

标签: javascript node.js asynchronous express

如何在一个请求中向一个端点发出多个请求?我找到了一个允许你这样做的异步库,但我似乎错误地实现了它。

我有一个[]批次[1,2,3 ... 18],我通过先前的请求然后我想将批次[]的元素传递给一个端点,这将给我所有的人批量作为承诺。这是代码:

var allPeople = [];
var allBatches = [];

app.get('/allpeople', function(req, res){
  async.each(allBatches, function(id){
    //console.log(id);
    client.batches.people(id)
    .then(function(people){ 
      allPeople.push(people);
      console.log(people)
      res.send(people)
    })
  })
})

app.get('/batches', function(req, res){
  client.batches.list()
  .then(function(batches) {
    batches.forEach(function(batch){
      allBatches.push(batch)
    });
    res.send(allBatches)     
  }) 
})

allPeople []最终应该是由18个人物对象组成的数组。

知道我哪里出错了?

2 个答案:

答案 0 :(得分:3)

您缺少回调(错误)功能。

  

参数

  • arr - 要迭代的数组。
  • iterator(item,callback) - 一个应用于arr中每个项目的函数。迭代器传递一个回调(err),一旦完成就必须调用它。如果没有发生错误,则应该在没有参数或显式空参数的情况下运行回调。
  • callback(err) - 在所有迭代器函数完成或发生错误时调用的回调函数。

答案 1 :(得分:0)

你需要调用callback()函数来迭代你的bathes数组的所有值。现在它只是在第一个值上迭代并返回共鸣。尝试实现上面的代码:

async.each(batches, function(id, callback) {
                client.batches.people(id)
                 .then(function(people){ 
          allPeople.push(people);
          callback();
        })
              }, function(err) {
                //Handle Final response here
                  if( err ) { return console.log(err); }
                  res.json({'peoples':allPeople});
              });