如何从API顺序处理异步结果?

时间:2016-06-28 18:09:03

标签: javascript asynchronous twitter request promise

这个问题可能有点模糊,但我会尽力解释。

我正在尝试创建一个可以从Twitter的API中检索的所有推文的数组,但它将每个请求限制为200条返回的推文。如何以异步方式向Twitter请求最多3200条返回的推文?我的意思是,是否可以异步调用Twitter的API,但是按顺序构建数组,确保推文在日期方面正确排序?

所以,我有一个数组:

var results = [];

我正在使用节点的请求模块:

var request = require('request');

我现在所拥有的(仅限于200)是

request(options, function(err, response, body) {
    body = JSON.parse(body);
    for (var i = 0; i < body.length; i++) {
        results.push(body[i].text);
    }
    return res.json(results);
});

我调查了可能使用'promise'模块,但理解起来很困惑。我尝试使用while循环,但它变得复杂,因为我无法遵循服务器正在采用的路径。

如果这不能很好地解释,请告诉我。

最后,我希望结果是一个填充了请求发送的所有推文的数组。

1 个答案:

答案 0 :(得分:1)

我建议使用request-promise代替request。这是我的解决方案。

var rp = require('request-promise');
var tweets = [];
var promises = [];
for (var i =1; i< 10; i++){
     var promise = rp(options);
    promises.push(promise);
}
Promise.all(promises).then(function(data){
  data.forEach(function(item){
    // handle tweets here
  });
  return res.json(tweets);
});