【发布时间】:2021-12-22 06:00:52
【问题描述】:
我正在寻找如何继续用字符串数组中的块填充请求缓冲区,直到所有块都完成。目前我有这样的事情:
links: string[] // Array to check e.g. 2000 strings
chunkSize = 200;
from(links).pipe(
bufferCount(chunkSize * 5),
concatMap(links => {
const linksToChunk = links;
const chunks: Observable<string[]>[] = [];
while (linksToChunk.length > 0) {
const chunk: string[] = linksToChunk.splice(0, chunkSize);
chunks.push(this.linkService.checkLinks(chunk));
}
return forkJoin(chunks);
}),
switchMap(chunks => [...chunks]) //Flatten array
).subscribe(
// Do stuff
)
但是,这样做是发出 5 个请求(块大小的 5 倍),每个请求有 200 个链接,一旦所有 5 个请求都完成后,再发出 5 个,依此类推。它只能完美地工作 5 个,但我宁愿让它不断填充缓冲起来。这是 rxjs v6。
编辑: 已回复here
【问题讨论】:
-
您可以使用mergeMap 并将您想要发出的最大并发请求作为
concurrent参数传递 -
@NickL 这是一个很好的建议。
-
随时发布您的解决方案作为答案并接受它
标签: angular typescript rxjs observable buffer