Jonathan C
Jonathan C

Reputation: 23

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?

I have two observables (obs1 and obs2) that I want to pay attention to. They never complete and over their lifetime I can expect that they emit the same number of items. I cannot know which one will emit first. I need something that will emit every time the source observables have each emitted their nth item. So, I am looking for an observable that acts in either of these ways:

Example for a:

If obs1 emits its 1st item and then obs2 emits its 1st item, myObservable will produce its 1st emission. Then if obs2 emits a 2nd and 3rd item nothing will happen until obs1 emits its 2nd item and only then will myObservable produce its 2nd emission.

(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.

Upvotes: 2

Views: 584

Answers (2)

Mrk Sef
Mrk Sef

Reputation: 8022

RxJS#zip

Zip does extactly what you're after.

For example, consider these two intervals that emit 5 times each but at different rates:

zip(
  interval(1000).pipe(map(v => v + 10) , take(5)), 
  interval(1500).pipe(map(v => v + 100), take(5))
).subscribe(console.log);

Upvotes: 2

Related Questions