Angular 中连续 HTTP 请求的动态数量

jay*_*jay 2 http observable rxjs typescript angular

这是我在这里的第一个问题,如果不够详细,请见谅。

我希望按顺序发出动态数量的请求(可能很多)以获取数据,

我需要从每个请求中收集这些数据,并在最后一个请求结束时作为最终的 observable 返回。

我尝试使用forkJoin组合请求,虽然,这不会按顺序发出每个请求,然后concat在每个请求之后发出并观察到。

Kur*_*ton 5

你想要:

  • 发出任意数量的连续 HTTP 请求(我假设基于某个数组)
  • 返回结果数组

我会concattoArray这里结合使用。concat将按顺序运行请求,并toArray在所有响应可用时发出一个数组。

// some dynamic array
const source = [ 1, 2, 3, 4, 5 ];

const observables = source.map(x => this.http.get('some url'));
concat(
  ...observables
).pipe(
  toArray()
).subscribe(responses => {
  console.log(responses);
  // array of results
});
Run Code Online (Sandbox Code Playgroud)

演示:https : //stackblitz.com/edit/angular-s1fdxj

  • 您还可以使用 toArray:https://www.learnrxjs.io/learn-rxjs/operators/transformation/toarray (2认同)