我有一个对象数组。对于每个对象,我需要触发一个异步请求(http 调用)。但我只想同时运行一定数量的请求。此外,如果我可以在所有请求完成后有一个同步点来执行某些代码,那将是很好的(但不是必需的)。
我尝试过以下建议:
还有更多......我什至尝试制作自己的运营商。
要么这些页面上的答案太旧而无法使用我的代码,要么我无法弄清楚如何将所有内容放在一起,以便所有类型都能很好地适应。
这是我到目前为止所拥有的:
for (const obj of objects) {
this.myService.updateObject(obj).subscribe(value => {
this.anotherService.set(obj);
});
}
编辑1: 好的,我想我们到了!随着Julius和pschild的回答(两者似乎同样有效),我设法限制了请求的数量。但现在它只会发射第一批 4 个,而不会发射其余的。所以现在我有:
const concurrentRequests = 4;
from(objects)
.pipe(
mergeMap(obj => this.myService.updateObject(obj), concurrentRequests),
tap(result => this.anotherService.set(result))
).subscribe();
我做错了subscribe()
什么吗?
顺便说一句:mergeMap
withresultSelector
参数已被弃用,所以我mergeMap
没有使用它。此外, 的obj
中mergeMap
不可见tap
,所以我不得不使用tap
' 参数
编辑2:
确保你的观察者完成!(花了我一整天)