组合多个请求并使用 rxjs 顺序订阅

Combine multiple requests and subscribe sequentially with rxjs

我有一个发送 x 个 http 请求的循环。

在某些情况下,用户可以发送如此多的请求,这可能会影响服务器性能。

我想转换现有逻辑并能够管理最大请求数。

示例代码

for( let i; i<x; i++ ) {
  this.subs= this.globalService.getData(formData, id).subscribe(data => {...}
}

如何仅在请求数量小于 10 时才授权触发,否则等待 api 响应并检查当前观察者是否小于 10?

重要的是按顺序订阅并且不发送数据数组以不更改订阅内的代码逻辑。

可能最简单的方法是使用 mergeMap() 和可选的 concurrency 选项。

range(x)
  .pipe(
    mergeMap(i =>  this.globalService.getData(formData, i), 10),
  )
  .subscribe();

这样你可以mergeMap()执行最多10个并发请求。