如何限制 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
策略)。
在我的组件中,我将一组需要执行的操作组合在一起。它们执行的顺序并不重要,但如果成功,我想在最后显示。每个操作都会导致调用 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
策略)。