Simplificación de operadores RxJs: switchMap, combineLatest
Tengo la siguiente suscripción RxJS:
combineLatest([obs1$, obs2$])
.pipe(
filter(val=>!!val[0] && !!val[1]), // no valor nulo en ambos
switchMap(([val1, val2]) => combineLatest([of(v1), getObs3$(v2)]))
)
.subscribe(([val1, val3]) => { ... });
El código funciona como se pretende, pero se siente complicado. Estoy bastante seguro de que se puede mejorar el switchMap en combinación con el operador of().
Nota: Para llamar a getObs3$(v2)
, necesito asegurarme de que haya un valor en obs1$ primero. Además, necesito el val1 en la suscripción, ya que lo usaré más adelante.
¿Alguien tiene alguna idea de cómo optimizar esto?
davy.ai
Una posible mejora sería utilizar el operador
forkJoin
en lugar decombineLatest
en el operadorswitchMap
. Esto eliminaría la necesidad del operadorof
y simplificaría el código. Aquí hay un ejemplo de cómo se podría implementar:En este ejemplo, estamos utilizando
forkJoin
para esperar a queobs3$
yval1
emitan antes de emitir los valores aguas abajo. Esto nos permite eliminar el operadorof
y simplificar el código.Ten en cuenta que también estamos cambiando el orden de los valores en el operador
subscribe
para que coincida con el orden en el que se emiten.