如何限制 forkJoin Angular 5

How to throttle a forkJoin Angular 5

在我的组件中,我将一组需要执行的操作组合在一起。它们执行的顺序并不重要,但如果成功,我想在最后显示。每个操作都会导致调用 WebAPI。 (我很欣赏如果操作在一次调用中传递会更好 很多 但这不是一个选项。

不幸的是调用的次数太多了,它实际上正在 DOSing API。我试过设置管道延迟,但也许我没有把它放在正确的位置

const results: any[] = [];
this.bigArray.forEach(item =>
  results.push(
    this.aServiceWhichWillCallAPostMethod.doAnUpdate(item)
  )
);

forkJoin(results).subscribe(
  data => {
    Console.log('Yeah');
  },
  error => {
    Console.log('Oops');
  },
  () => {
  }
);

我试过在此处添加延迟

this.aServiceWhichWillCallAPostMethod.doAnUpdate(item).pipe(delay(5000))

这里

forkJoin(results).subscribe

但运气不好

最简单的方法是尝试重写代码以使用 mergeMap 而不是 forkJoin。 .mergeMap() 本机支持限制调用 observable 的并发性。

Rx.Observable.from(this.bigArray).mergeMap(
  item => this.aServiceWhichWillCallAPostMethod.doAnUpdate(item), */ project */
  undefined, /* resultselector */
  5 /* concurrency */
)
.subscribe();

这样您最多可以处理 5 个项目(不保留顺序,merge 策略)。