Espera hasta que la llamada a la API devuelva los datos en Angular.
Tengo un gráfico de Donut que se carga con datos devueltos de tres llamadas a la API. He llamado a la carga del gráfico y a la función de llamadas a la API en ngOninit(). Pero mi gráfico no se carga. Entiendo que en Angular, la ejecución no espera a que la llamada a la API devuelva los datos y sigue ejecutando el resto del programa. ¿Hay alguna manera de esperar hasta que la llamada a la API devuelva los datos y luego cargar el gráfico?
TS
En ngOnit() {
this.refreshDoneCount_DE();
this.refreshNotDoneCount_DE();
this.refreshPendingCount_DE();
this.refreshChart();
}
refreshDoneCount_DE() {
this.dashboard.get_done_count_de_api().subscribe(data => {
this.done_count_de = data;
});
}
refreshNotDoneCount_DE() {
this.dashboard.get_notdone_count_de_api().subscribe(data => {
this.not_done_count_de = data;
});
}
refreshPendingCount_DE() {
this.dashboard.get_pending_count_de_api().subscribe(data => {
this.pending_count_de = data;
});
}
Gracias.
davy.ai
Sí, hay una manera de esperar hasta que la llamada a la API devuelva los datos y luego cargar el gráfico. Una forma es utilizar las palabras clave
async
yawait
en el métodongOnInit()
.Aquí tienes un ejemplo de implementación:
TS
Con esta implementación, se agrega la palabra clave
async
al métodongOnInit()
y los métodosrefreshDoneCount_DE()
,refreshNotDoneCount_DE()
yrefreshPendingCount_DE()
se convierten en métodosasync
que devuelven unaPromise
.Dentro de cada suscripción a la llamada a la API, se llama a la función
resolve()
para indicar que la llamada a la API se ha completado y la Promesa debe resolverse.El uso de la palabra clave
await
en el métodongOnInit()
antes de llamar a cada método de la API asegura que el programa espere a que cada llamada a la API se complete antes de pasar al siguiente método. Una vez que todas las llamadas a la API se han completado, se puede llamar al métodorefreshChart()
para cargar el gráfico con los datos actualizados.