【发布时间】:2021-06-10 05:22:45
【问题描述】:
有一个外部 API 可以返回以下所有项目:
{
page : 1,
per_page : 10,
total : 200,
items : [],
}
我想获取所有页面。例如:在上述场景中,总页数 = 20 (Total/per_page 即 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");
}
);
}
【问题讨论】:
-
您知道要获取的 20 个页面的 url/资源吗?模式是什么?
标签: angular parallel-processing