Reputation: 23
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:
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
Reputation: 8022
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
Reputation: 370
I believe you want the "zip" function (or maybe 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/
Upvotes: 1