Soy muy nuevo en angular y mecanografiado. He estado intentando esto.
doSomething() { return this.http.post(this.path + "dosomething", data).toPromise(); }ahora en .ts lo estas esperando
await servicesCalls.doSomething();Tras su implementación exitosa, necesito hacer lo mismo con todos los demás mapas del servicio.
Pero primero quiero asegurarme de que haya publicado los datos.
await serviceCalls.doAnotherThing(); La api devuelve IHTTPACTIONRESULT es decir, Ok() .
Alguien me puede ayudar con eso? ¡Gracias por adelantado!
No hay necesidad de usar promesas. Los métodos HTTP en Angular devuelven un Observable. Puede suscribirse a ese observable, y cuando ese observable emite algunos datos, en el método de suscripción puede llamar a otro servicio.
Algo como esto::
doSomething() { return this.http.post(this.path + "dosomething", data); }Ahora hay varias maneras diferentes de hacer esto:
Método uno : forma normal. Llame a otro servicio en la suscripción del primero.
Componente:
public callService() { doSomething.subscribe(data => { serviceCalls.doAnotherThing(); }, err => { // do something }) }La suscripción solo se llamará cuando la función doSomething (es decir, su solicitud HTTP devuelve algún valor).
Método 2 : puede usar operadores rxjs - switchMap así:
doSomething() .pipe( //Use switchMap to call another API(s) switchMap((dataFromServiceOne) => { serviceCalls.doAnotherThing(); }) ).subscribe((data) => { // do something with response console.log(data); });Para más detalles sobre los operadores rxjs:
Usar switchMap
doSomething() { return this.http.post(this.path + "dosomething", data); } doAnotherthing() { return this.http.post(this.path + "dosomething", data); } doSomething().pipe( tap(doSomethingResponse => this.performSomeOperation(doSomethingResponse)), switchMap(_ => this.doAnotherthing()) ).subscribe(doAnotherthingResponse => console. log(doAnotherthingResponse));Simplemente podría almacenar esto en una variable como esta,
const promise = servicesCalls.doSomething();
y simplemente llame al siguiente así,
promise.then(async () => await serviceCalls.doAnotherThing()).catch(e => console.error(e));
La siguiente llamada a la API solo se ejecutará cuando se resuelva la promesa anterior.