es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible mejora sería utilizar el operador forkJoin en lugar de combineLatest en el operador switchMap. Esto eliminaría la necesidad del operador of y simplificaría el código. Aquí hay un ejemplo de cómo se podría implementar:

    combineLatest([obs1$, obs2$])
      .pipe(
         filter(val=>!!val[0] && !!val[1]), // no hay valor nulo en ambos
         switchMap(([val1, val2]) => forkJoin([obs3$, of(val1)]))
       )
       .subscribe(([val3, val1]) => { ... });
    

    En este ejemplo, estamos utilizando forkJoin para esperar a que obs3$ y val1 emitan antes de emitir los valores aguas abajo. Esto nos permite eliminar el operador of 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.

Comments are closed.