RxJS中大块的可观察对象的运行组

问题描述 投票:1回答:1

我正在尝试以块为单位运行可观察对象池,并在两者之间添加一个间隔。我尝试了下面的代码:

    let i = 0;
    from([].constructor(20)).pipe(
      concatMap(a => of(i).pipe(delay(1000))), // add a delay
      mergeMap(obj => of(i++), 5) // run 5 in parallel
    ).subscribe(res => {
      console.log('done', new Date().toISOString(), res);
    });

现在这会增加所有可观察到的延迟,所以我得到的输出是:

done 2020-03-25T09:23:34.151Z 0
done 2020-03-25T09:23:35.151Z 1
done 2020-03-25T09:23:36.151Z 2
done 2020-03-25T09:23:37.151Z 3
done 2020-03-25T09:23:38.151Z 4
done 2020-03-25T09:23:39.151Z 5
done 2020-03-25T09:23:40.153Z 6
done 2020-03-25T09:23:41.155Z 7
done 2020-03-25T09:23:42.161Z 8
done 2020-03-25T09:23:43.163Z 9
done 2020-03-25T09:23:44.167Z 10
done 2020-03-25T09:23:45.170Z 11
done 2020-03-25T09:23:46.171Z 12
done 2020-03-25T09:23:47.177Z 13
done 2020-03-25T09:23:48.178Z 14
done 2020-03-25T09:23:49.182Z 15
done 2020-03-25T09:23:50.183Z 16
done 2020-03-25T09:23:51.186Z 17
done 2020-03-25T09:23:52.188Z 18
done 2020-03-25T09:23:53.192Z 19

如您所见,它会运行它们中的每一个并增加1秒的延迟。我要实现的是先运行5个并行,然后添加1秒延迟,然后运行下5个,依此类推。

我什至尝试在管道中交换mergeMap和concatMap顺序,但结果相同。

关于如何做到这一点的任何想法?

javascript angular rxjs rxjs6
1个回答
1
投票

您可以使用bufferCount创建批次,然后使用forkJoin并行运行它们:

© www.soinside.com 2019 - 2024. All rights reserved.