Javascript Awaits no se ejecuta en el orden correcto dentro de una función Async.
Sé que hay muchas preguntas relacionadas con async y await y promesas aquí, las he revisado todas y no puedo hacer que ninguna de las soluciones funcione con mi situación específica. Estoy seguro de que es porque estoy confundido acerca del uso de promesas y devoluciones de llamada. Todo lo que quiero hacer es ejecutar estas 3 llamadas a la API en orden. Este es mi intento más reciente:
async function getData() {
var firstCall = api.getBaseInfo(nombre, num, (error, response) => {
console.log(response)
});
var secondCall = api.getMainInfo(dirección, empresa, { type:'init' , family: nombre, id: num }, (error, response) => {
console.log(response)
});
var thirdCall = api.getBackData(num, (error, orders, genre) => {
console.log(orders)
});
await firstCall
await secondCall
await thirdCall
}
getData()
He intentado todo tipo de variaciones incorporando .then, múltiples funciones async, funciones normales, pero todo lo que hago hace que la salida llegue como si las 3 llamadas se ejecutaran simultáneamente. No me importa qué métodos se utilicen, solo me gustaría saber cómo puedo organizar mi código para que cada llamada se ejecute después de que haya terminado la anterior.
davy.ai
Para asegurarse de que cada llamada a la API se ejecute después de que la anterior haya terminado, podemos convertir las funciones basadas en callbacks en funciones basadas en promesas utilizando el método
util.promisify()
proporcionado por el móduloutil
de Node.js. Este método convierte una función que utiliza una API de callback en una función que devuelve una Promesa.Aquí tienes una implementación de ejemplo de la función
getData()
utilizandoasync/await
y Promesas:En esta implementación, primero usamos
util.promisify()
para convertir cada función basada en callback en una función basada en promesas. Luego, podemos usar la palabra claveawait
para esperar a que cada Promesa se resuelva antes de pasar a la siguiente llamada a la API.Además, es importante envolver las declaraciones
await
en un bloquetry/catch
para manejar los rechazos de las Promesas en caso de errores.Nota: Asegúrate de
require
los módulos necesarios y de que las variables (api
,name
,num
,address
,company
) tengan valores apropiados en este ejemplo.