Tengo una parte del código que verifica si dos observables están actualizados y devuelve el segundo observable si lo están:
combineLatest([$source1, $source2]).pipe( filter(([source1, source2]) => source1.id === source2.id), map(([_, source2]) => source2) );¿Cómo podría simplificar el código?
puede usar el operador iif rxjs, por lo que puede suscribirse a un observable u otro según una condición
combineLatest([$source1, $source2]).pipe( mergeMap( ([s1, s2]) => iif(() => s1.id === s2.id, of(s2), EMPTY) ) ).subscribe(console.log);Si desea que la parte superior de su tubería sea source2 (lo que significa que no tiene ningún mapeo de flujo extraño), y si desea que su código se lea en inglés simple, entonces puede escribir su código de esta manera.
emitWhenSourcesAreEqual$ = sample( combineLatest([source1$, source2$]).pipe( filter(([source1, source2]) => source1?.id === source2?.id) ) ); output$ = source2$.pipe(emitWhenSourcesAreEqual$);