具有相同回调函数的多个异步请求

时间:2014-10-28 06:31:52

标签: node.js mongodb node-async node-request

 var parsedUrl = req.body.parsedUrl;
  console.log(parsedUrl);
  var options = {
      url: 'https://api.github.com/repos/' + parsedUrl,
      headers: {
          'User-Agent': 'request'
      }
  };

   var options2 = {
       url: 'https://api.github.com/repos/' + parsedUrl + '/readme',
       headers: {
           'User-Agent': 'request'
       }
   };

 function callback(error, response, body) {
      if (!error && response.statusCode == 200) {
          var info = JSON.parse(body);
          Thing.create(info, function(err, thing) {
            //console.log(info);
            if(err) { return handleError(res, err); }
            return res.json(201, thing);
          });

      } else {
        console.log('github request error');
      }

  }
  request(options, callback);
  request(options2, callback);

基本上,我需要提出两个请求,所以我的问题如下: 1.如何使用异步模块异步发出这两个请求。我曾尝试使用async.parallel,但是语法不能很好地处理请求的语法,因为async.parallel需要回调。

2.我如何合并结果?我需要在Mongo的同一个对象中同时将它们保存到数据库中。

我希望这是有道理的。 谢谢,

1 个答案:

答案 0 :(得分:1)

您可以使用async库:

npm install async --save

创建一个包含optionsoptions2的数组,并在数组中的每个项目上调用request

async.map([options, options2], request, function(err, results) {
  // results[0] is the response for options
  // results[1] is the response for options2
  // you can merge them here and insert into mongodb as one document
});