es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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ódulo util 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() utilizando async/await y Promesas:

    const util = require('util');
    const getBaseInfoAsync = util.promisify(api.getBaseInfo);
    const getMainInfoAsync = util.promisify(api.getMainInfo);
    const getBackDataAsync = util.promisify(api.getBackData);
    
    async function getData() {
      try {
        const firstData = await getBaseInfoAsync(name, num);
        console.log(firstData);
    
        const secondData = await getMainInfoAsync(address, company, { type: 'init', family: name, id: num });
        console.log(secondData);
    
        const thirdData = await getBackDataAsync(num);
        console.log(thirdData);
      } catch (error) {
        console.error(error);
      }
    }
    
    getData();
    

    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 clave await 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 bloque try/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.

Comments are closed.