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 switchMap
el 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.get
porque 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.