【发布时间】:2020-06-20 02:14:33
【问题描述】:
这是我想要做的:
给定一个分页 API,使用并行请求获取所有资源。
API 每次调用返回有限数量的资源。所以,你需要使用一个偏移量参数来获取下一组数据,直到所有数据都被提取出来。
这是我的想法(但收到一些警告,因为我在响应中使用 flat),所以也许有更好的方法来做到这一点。
- 获取项目总数。
- 给定计数和限制,计算获取所有数据需要多少请求。
- 并行触发所有请求并将所有数据合并到一个扁平数组中。
这是一个例子:
https://stackblitz.com/edit/paginated-api?embed=1&file=index.ts&hideExplorer=1&devtoolsheight=100
getCount().pipe(
mergeMap(count => range(0, Math.ceil(count / limit))),
map(offset => getDevices(offset, limit)),
combineAll(),
).subscribe(res => {
const a = res.flat(); // <--- warning: Property 'flat' does not exist on type '{ name: string; }[][]'.
console.log(JSON.stringify(a));
});
我觉得这个解决方案有点 hacky。它使订阅中的响应变平。我想知道是否有可以在管道上使用的 RXJS 运算符来展平响应,所以我不必在订阅中使用?
【问题讨论】:
-
请给minimal reproducible example。 什么警告?
-
@jonrsharpe 添加了一个示例和我收到的警告
-
@jonrsharpe 很好地消除警告。但是,我觉得在订阅中展平数组有点 hacky。我想知道是否有可以在管道上使用的 RXJS 运算符来展平响应,所以我不必在订阅中使用?
-
RxJS 不关心数组,它处理 observables。但是,如果您的工作代码您认为可以改进,请参阅Code Review。
标签: javascript typescript rxjs