【问题标题】:What would be the best method for looping through HTTP requests循环通过 HTTP 请求的最佳方法是什么
【发布时间】:2019-08-12 20:49:27
【问题描述】:

我有一个需要发出的 GET 请求。问题是每个请求只返回一个包含 50 个数据条目的页面,因此可以有多个页面的数据只能通过不同的请求来检索。我必须等待所有数据都被抓取,以便我可以将数据作为一个整体进行处理

我需要做一些类似“

for(var i = 1; i <= numPages; ++i){
     this.http.get(url, httpOptions).subscribe((information: any =>{
           allInfo.push(information);
        });
}
processData(allInfo);

url 将更新为正确的页面。

我知道 processData 将在 for 循环完成之前执行。是否有办法合并promisethen 语句或者pipe 以将所有数据推送到allInfo 数组以便随后对其进行处理?

【问题讨论】:

    标签: angular http promise get


    【解决方案1】:

    一种方法是,不是订阅所有 HTTP 请求,而是将这些 observable 存储在一个数组中,然后使用 forkJoin 订阅所有这些请求的组合结果。

    类似这样的:

    let observaleArray: Observable[] = [];
    
    for(var i = 1; i <= numPages; ++i){
        observableArray.push(this.http.get(url, httpOptions));
    }
    
    forkJoin(observableArray)
        .subscribe(allInfo => {
           processData(allInfo); 
        });
    

    别忘了导入ObservableforkJoin

    希望对你有帮助。

    【讨论】:

    • forkJoin 是一个非常好的方法,竖起大拇指。请记住,如何使用此运算符处理错误并非易事,您可以检查此答案作为方法建议stackoverflow.com/a/56861093/9011723
    • 那么在for循环执行之前forkJoin不会执行?
    • 我能够将其合并到我的代码中,并且效果很好!我从未听说过forkJoin!谢谢!
    猜你喜欢
    • 2017-02-20
    • 2015-12-27
    • 2019-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多