【问题标题】:How to sequentially handle asynchronous results from API?如何按顺序处理来自 API 的异步结果?
【发布时间】:2016-06-29 02:33:42
【问题描述】:

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

我正在尝试创建一个包含我可以从 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 循环,但它变得很复杂,因为我无法遵循服务器所采用的路径。

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

最后,我希望结果是一个数组,其中包含请求发送的所有推文。

【问题讨论】:

    标签: javascript asynchronous twitter request promise


    【解决方案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);
    });
    

    【讨论】:

    • 在处理所有数据之前,我需要访问请求中的一些数据……我该怎么做呢?有点像“窥视”承诺的内容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 2017-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    相关资源
    最近更新 更多