我在服务(角度)中有一个方法,该方法用作通用方法,可从json api规范端点获取资源列表。
每个请求的端点限制为10个资源,并且它们返回元信息,例如页面总大小。
在这种方法中,我要执行的操作是如果页面大小为1则执行请求,然后只返回请求,但是如果页面大小大于1则我要遍历并映射所有内容资源在一起。
例如,如果我正在请求博客帖子,并且我有100个。页面大小限制为10个,我将收到这样的响应...
{
"data": [
...
],
"paginationMeta": {
"pageSize": 10,
"totalItems": 100
}
}
获得此信息后,我想循环10次以获取其余数据并将其组合在一起。
我目前有此代码...
return this.apiService.list('posts').pipe(switchMap((response: any) => {
if (response.paginationMeta.pageSize === 1) {
of(response);
}
// We know the current page will be 2
let currentPage: number = 2;
const resource = response.data;
const requests: any[] = [];
while (currentPage <= response.paginationMeta.pageSize) {
requests.push(this.apiService.list('posts', currentPage));
currentPage++;
}
forkJoin(requests).pipe(map((responses: any[]) => {
responses.forEach((apiResponse: any) => {
resource.push(apiResponse);
});
return of(resource);
}));
});
我认为这与我要实现的目标相去甚远。我已经进行了一些谷歌搜索,但似乎找不到任何可以帮助我实现这一目标的东西。