如何节流 forkJoin Angular 5

Mar*_*ark 1 rxjs angular2-observables angular

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

不幸的是,调用的次数太多了,它有效地对 API 进行了 DOS 处理。我试图延迟管道,但也许我没有把它放在正确的地方

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

forkJoin(results).subscribe(
  data => {
    Console.log('Yeah');
  },
  error => {
    Console.log('Oops');
  },
  () => {
  }
);
Run Code Online (Sandbox Code Playgroud)

我试过在这里添加延迟

this.aServiceWhichWillCallAPostMethod.doAnUpdate(item).pipe(delay(5000))
Run Code Online (Sandbox Code Playgroud)

和这里

forkJoin(results).subscribe
Run Code Online (Sandbox Code Playgroud)

但没有运气

Mar*_*ten 6

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

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

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