Saltar al contenido

Angular 6: pasar la respuesta del Observable a otro Observable

Si te encuentras con algún detalle que no comprendes puedes dejarlo en los comentarios y te ayudaremos lo más rápido posible.

Solución:

Puede usar un operador como switchMap que, según la documentación, “se asigna a observable, completa el observable interno anterior, emite valores”. Utilizando switchMap cambiará a la 2da HttpClient llamada mapeo del primer observable, cuando la fuente del primer HttpClient emite llamadas. Si se ejecuta una nueva solicitud inicial/externa, cancelará la solicitud en tránsito/en proceso.

Tenga en cuenta la forma en que su alert() las declaraciones están configuradas, simplemente no funcionarán como alert() se ejecutará antes de que se completen las solicitudes, por lo tanto, el undefined. Necesitarías ejecutar alert() o similar dentro subscribe o utilizar operadores como do/tap para asegurarse de que los datos realmente se han devuelto.

import  switchMap  from 'rxjs/operators';

_httpClient.get('http://localhost:5000/api/mycontroller')
  .pipe(
    switchMap(output => _httpClient.get('http://localhost:5000/api/mycontroller2' + output))
  )
  .subscribe(output2 => alert(output2));

Si necesita guardar los resultados en alguna propiedad de clase local, puede utilizar hacer/tocar para realizar una acción antes/después de que se devuelvan/asignen/procesen los datos.

import  switchMap, tap  from 'rxjs/operators';

_httpClient.get('http://localhost:5000/api/mycontroller')
  .pipe(
    tap(output => 
        console.log(output);
        this.output = output;            
    ),
    switchMap(output => _httpClient.get('http://localhost:5000/api/mycontroller2' + output)),
    tap(output2 => 
        console.log(output2);
        this.output2 = output2;            
    )
  )
  .subscribe(output2 => alert(output2));

Para completar la respuesta aceptada, otras alternativas a switchMap debe mencionarse también.

En contraste con switchMapel mergeMap (también llamado flatMap) el operador NO cancelarse si el “observable externo” emite una segunda vez antes de que se complete el “observable interno”. Esto puede no ser importante en el caso de HttpClient.getporque normalmente solo emite una vez, por lo que nunca vuelve a activar el observable interno.

Sin embargo, tenga en cuenta la diferencia entre switchMap y mergeMap al continuar trabajando con operadores RxJS, especialmente cuando se trata de un flujo secuencial de datos.

Si para ti ha sido provechoso este post, sería de mucha ayuda si lo compartes con más juniors así nos ayudas a difundir esta información.

¡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 *