是否有一个 rxjs 操作符来获取一个可观察的列表并一次订阅 N 直到全部完成?

JC *_*ord 4 rxjs

我的应用程序需要多次单独调用 API 以获取数据,但出于性能原因,我不想一次全部转储它们。是否有一个 rxjs 运算符可以让我一次只运行几个然后将所有结果合并为一个?

因此,如果我需要从 ABC...XYZ 获取结果,并且我只想激活 2 个请求,它会订阅 A 和 B。然后,如果 B 完成,它将订阅 C。然后 A 完成并订阅 D。并且依此类推,直到所有内容都完成但只有 2 个订阅处于活动状态。

lag*_*man 6

是的,merge()有一个选项可以做到这一点。最后一个参数merge必须是(并发请求数)。

摘自文档:

const timer1 = interval(1000).pipe(take(10));
const timer2 = interval(2000).pipe(take(6));
const timer3 = interval(500).pipe(take(10));
const concurrent = 2; // the argument
const merged = merge(timer1, timer2, timer3, concurrent);
merged.subscribe(x => console.log(x));
Run Code Online (Sandbox Code Playgroud)

  • 事实上,这是正确的解决方案。[`merge` observable 创建方法](https://rxjs.dev/api/index/function/merge) 接受并发参数来限制它订阅的活动内部 observable 数量。6 个源可观察量的限制是因为仅定义了 6 个 TypeScript 函数重载。`merge` 本身没有限制。因此,如果您想将它与更多参数一起使用,我认为您可以像 `merge.apply([...])` 一样使用它。或者另一种解决方案是使用“mergeAll(concurrency)”运算符。 (4认同)