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:
- (a) It emits every time the source observables have each emitted the same number of items.
- (b) It emits every time the source observable, that has currently emitted the least amount of items, makes an emission.
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.
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);
Answered By – Mrk Sef