RxJS - Multiple sources for .withLatestFrom

22,569

Solution 1

withLatestFrom supports multiple observables:

.withLatestFrom(source1, source2, source3)
.map((data) => { console.log(data) });

-> [val, value1, value2, value3]

It also supports function as it's last parameter, so you can get values other than arrays:

observable$
    .withLatestFrom(source1, source2, (val, one, two) => {
        return {val: val, one: one, two: two};
     });

Solution 2

withLatestFrom accepts multiple observables. so you can write it like:

let obs1$ = Rx.Observable.of('a');
let obs2$ = Rx.Observable.of('b');

Rx.Observable.interval(1000)
  .withLatestFrom(obs1$, obs2$)
  .subscribe(x=>console.log(x))
Share:
22,569

Related videos on Youtube

Preda70R
Author by

Preda70R

Updated on July 09, 2022

Comments

  • Preda70R
    Preda70R almost 2 years

    I want to merge the latest emitted values from multiple Observables, so right now I'm using .withLatestFrom. Except, it nests the data together in nested arrays instead of pushing the data into a new array value. Example code below.

    Any ideas on how I can retrieve multiple Observable emits using .withLatestFrom?

    source0
      .withLatestFrom(source1)
      .withLatestFrom(source2)
      .withLatestFrom(source3)
      .map((data) => { console.log(data) });
    
  • aruno
    aruno almost 7 years
    You can wrap the {} with () then you don't need an explicit return statement : .withLatestFrom(source1, source2, (val, one, two) => ({ val: val, one: one, two: two }));
  • Eliya Cohen
    Eliya Cohen about 5 years
    I was going to upvote this answer, but turns out I already upvoted it