Obtengo un RxJS Observable de un httpService que es el http real de Angular. Ahora, tan pronto como obtenga un resultado positivo de eso, quiero procesar la siguiente Solicitud http que obtengo de this.retrieve() . Esto es más o menos solicitudes de concatenación. ¿Hay una mejor manera de hacerlo?
return this.httpService.query(data) .map(data => { if(data.status > 1) this.retrieve().subscribe(); return data; });El encadenamiento de solicitudes HTTP se puede realizar mediante los operadores flatMap o switchMap . Digamos que queremos hacer tres solicitudes donde cada solicitud depende del resultado de la anterior:
this.service.firstMethod() .flatMap(firstMethodResult => this.service.secondMethod(firstMethodResult)) .flatMap(secondMethodResult => this.service.thirdMethod(secondMethodResult)) .subscribe(thirdMethodResult => { console.log(thirdMethodResult); });De esta forma, puede encadenar tantas solicitudes interdependientes como desee.
ACTUALIZACIÓN: a partir de la versión 5.5 de RxJS, se introdujeron operadores canalizables y la sintaxis cambió ligeramente:
import {switchMap, flatMap} from 'rxjs/operators'; this.service .firstMethod() .pipe( switchMap(firstMethodResult => this.service.secondMethod(firstMethodResult)), switchMap(secondMethodResult => this.service.thirdMethod(secondMethodResult)) ) .subscribe(thirdMethodResult => { console.log(thirdMethodResult); });