如何用请求填充缓冲区

How to fill a buffer with requests

我正在寻找如何继续用字符串数组中的块填充请求缓冲区,直到完成所有块。目前我有这样的东西:

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 倍),每个请求有 200 个链接,一旦完成所有 5 个请求,再发出 5 个等等。它只能完美地工作五个,但我宁愿拥有它不断地填充缓冲区。这是 rxjs v6.

编辑: 已回答

正如@NickL 建议使用 mergeMap 这就是我最终得到的:

const concurrentRequests = 5;

from(links).pipe(
        bufferCount(chunkSize),
        mergeMap(chunk => this.linkService.checkLinks(chunk), concurrentRequests)
      ).subscribe( 
        // Do stuff 
      )

现在每次请求完成时,它都会填充一个由 chunkSize 设置的块,并一直这样做,直到所有链接都从初始链接数组中分块,最多同时请求 5 个。