如何节流forkJoin Angular 5

时间:2018-09-25 11:31:29

标签: angular rxjs angular2-observables

在我的组件中,我将一组需要执行的操作分组在一起。执行它们的顺序并不重要,但是如果成功,我想在最后显示。每个操作都将导致对WebAPI的调用。 (我非常感谢,如果一次调用传递操作会更好,但不是一种选择。

不幸的是,调用次数太多,实际上是在DOS下运行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

但没有运气

1 个答案:

答案 0 :(得分:3)

最简单的方法是尝试重写代码以使用mergeMap而不是forkJoin。 Missing label具有本机支持,可以限制调用可观察变量的并发性。

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

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