angular - Angular 11:并行获取所有页面
问题描述
有一个外部 API 返回所有项目,如下所示:
{
page : 1,
per_page : 10,
total : 200,
items : [],
}
我想获取所有页面。例如:在上述场景中,总页数 = 20(总/每页,即 200/10)
进行第一次调用并知道页数然后并行进行其余所有调用并将其合并的最佳方法是什么?
使用 Angular 11 - concatMap、flatMap、forkJoin 等。
解决方案:
基于@Michael 评论的更新代码,如下所示:
getAllItems(): void {
this.itemService.getItemsByPage(1).pipe(
switchMap((itemPage: ItemPage) => {
const totalPages = Math.ceil(itemPage.total/itemPage.per_page);
const req$ = Array(totalPages).fill(1).map((_, index) =>
this.itemService.getItemsByPage(index + 1)
);
return forkJoin(req$);
})
).subscribe(
res => {
for (let page = 1; page <= res.length; page++) {
//Collect all responses using res[page]
}
},
error => {
console.log("Error Fetching Items");
}
);
}
解决方案
您可以调用 API 以检索所有可用页面和项目总数,然后实现一些逻辑以使用 forkJoin 并行调用 API 以获取您拥有的页面数
推荐阅读
- python - Python moviepy 正在生成一个奇怪的视频
- css - 如何将 bulma navbar burger 对齐到页面的右端?
- wordpress - 在通过 hook/php 加载 Woocommerce 感谢页面的内容后,有什么方法可以运行代码?
- ruby-on-rails - 为什么 Ruby 版本 2.7.1p83 和 rails 6.0.3.5 在以下 ApplicationController 代码中说 config.action_dispatch 为 nil?
- visual-studio-2019 - 在“快速操作和重构”菜单 VS 2019 CE 中未看到“生成构造函数”
- c++ - 如何使用 Telegram 库 (Td) 解决 Qt 中的链接错误
- jquery - 带有 jPlayer 音频播放列表的高级自定义字段中继器
- angular - 获取客户端机器的mac地址或子网中的私有地址
- python - Pandas:如何通过多个条件选择行(如果不是 nan 并且等于特定值)
- java - javax.xml.ws.WebServiceException:未定义的端口类型: