Saltar al contenido

¿Suscripciones anidadas de RxJS Observables?

Verificamos exhaustivamente cada uno de los escritos de nuestra web con el objetivo de enseñarte en todo momento información veraz y actual.

Solución:

Como se menciona en los comentarios, usted está buscando el flatMap operador.

Puede encontrar más detalles en las respuestas anteriores:

  • Cómo hacer la secuencia de la cadena en rxjs
  • ¿Por qué necesitamos usar flatMap?

Su ejemplo se leería como:

this.returnsObservable1(...)
  .flatMap(success => this.returnsObservable2(...))
  .flatMap(success => this.returnsObservable3(...))
  .subscribe(success => (...)); 

Anteriormente respondí para RxJS 5, terminé en esta página mientras usaba 6.

En el caso de que también esté en 6 (y creo que ya debería estarlo), puede usar flatmap como operador dentro pipe.

Modificó el código de ejemplo de @user3743222:

this.returnsObservable1(...)
  .pipe(
    flatMap(success => this.returnsObservable2(...)),
    flatMap(success => this.returnsObservable3(...))
  )
  .subscribe(success => (...)); 

El operador switchMap también puede ser útil. Aquí se pueden encontrar algunos ejemplos que describen la utilidad de switchMap en comparación con las suscripciones anidadas:

  1. situación con suscripciones anidadas

Este codepen ofrece una demostración: https://codepen.io/anon/pen/zdXBvP?editors=1111

Rx.Observable
  .interval(5000)
  .subscribe((val) => 
    console.log("outer:", val);
    Rx.Observable
      .interval(1000)
      .subscribe((ival) => 
        console.log("inner:", val, ival); 
      );
  );
  1. situación con switchMap

Este codepen ofrece una demostración: https://codepen.io/anon/pen/xLeOZW?editors=1111

Rx.Observable
  .interval(5000)
  .switchMap((val) => 
    console.log("outer:", val);
    return Rx.Observable.interval(1000).map((ival) => [val, ival]);
  )
  .subscribe((val) => 
    console.log("inner:", val[0], val[1]);
  );

Si piensas que ha sido de utilidad nuestro post, nos gustaría que lo compartas con otros seniors así contrubuyes a difundir nuestro contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *