使用 RXJS,有没有一种方法可以生成一个当源 Observables 当前发出的项目数量相同时发出的 observable?
Using RXJS, is there a way to produce an observable that emits when the number of items, CURRENTLY emitted by the source Observables, is the same?
我有两个要注意的可观察对象(obs1 和 obs2)。他们永远不会完成,并且在他们的一生中我可以预期他们会发出相同数量的物品。我不知道哪个会先发射。我需要在每次源可观察对象都发出第 n 个项目时发出的东西。因此,我正在寻找以以下任一方式运行的可观察对象:
- (a) 每次源 observables 都发出相同数量的项目时它就会发出。
- (b) 每当当前发出最少数量的项目的源 Observable 进行发射时,它就会发射。
例如:
如果 obs1 发出它的 第一项 然后 obs2 发出它的 1st item,myObservable 将产生它的 1st emission。
然后如果 obs2 发出 2nd 和 3rd item 在 obs1[ 之前什么都不会发生=42=] 发出它的 第二项 然后 myObservable 才会产生它的 第二项发射 .
(a) When source observables have the same number of items emitted.
(b) Whenever, across all the source observables, the lowest number of items emitted increases.
我相信您需要“zip”功能(或者可能是 combineLatest)。
https://rxjs.dev/api/index/function/zip
https://rxjs.dev/api/index/function/combineLatest
https://www.freecodecamp.org/news/understand-rxjs-operators-by-eating-a-pizza/
RxJS#zip
Zip 完全符合您的要求。
例如,考虑这两个发射 5 次但发射率不同的间隔:
zip(
interval(1000).pipe(map(v => v + 10) , take(5)),
interval(1500).pipe(map(v => v + 100), take(5))
).subscribe(console.log);
我有两个要注意的可观察对象(obs1 和 obs2)。他们永远不会完成,并且在他们的一生中我可以预期他们会发出相同数量的物品。我不知道哪个会先发射。我需要在每次源可观察对象都发出第 n 个项目时发出的东西。因此,我正在寻找以以下任一方式运行的可观察对象:
- (a) 每次源 observables 都发出相同数量的项目时它就会发出。
- (b) 每当当前发出最少数量的项目的源 Observable 进行发射时,它就会发射。
例如:
如果 obs1 发出它的 第一项 然后 obs2 发出它的 1st item,myObservable 将产生它的 1st emission。 然后如果 obs2 发出 2nd 和 3rd item 在 obs1[ 之前什么都不会发生=42=] 发出它的 第二项 然后 myObservable 才会产生它的 第二项发射 .
(a) When source observables have the same number of items emitted.
(b) Whenever, across all the source observables, the lowest number of items emitted increases.
我相信您需要“zip”功能(或者可能是 combineLatest)。
https://rxjs.dev/api/index/function/zip
https://rxjs.dev/api/index/function/combineLatest
https://www.freecodecamp.org/news/understand-rxjs-operators-by-eating-a-pizza/
RxJS#zip
Zip 完全符合您的要求。
例如,考虑这两个发射 5 次但发射率不同的间隔:
zip(
interval(1000).pipe(map(v => v + 10) , take(5)),
interval(1500).pipe(map(v => v + 100), take(5))
).subscribe(console.log);