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.

Devolver una promesa sin resolver (async/await) en javascript.

Estaba esperando que alguien pudiera ayudarme a entender por qué el siguiente código no está funcionando correctamente.

En la clase Expense Data, tengo una función listExpenses que solo debería devolver datos una vez que la promesa haya sido resuelta o rechazada.

Sin embargo, cuando instancio un nuevo objeto expenseData y luego intento registrar una lista de gastos, obtengo una promesa pendiente. Habría esperado que la promesa siempre se resolviera en esta etapa.

class ExpenseData {
  constructor() {
    this.client = new Client({ database: 'expenses' })
  }

async listExpenses() {
    await this.client.connect().catch(err => logAndExit(err));
    let data = await this.client.query("SELECT * FROM expenses ORDER BY created_on ASC")
                                .catch(err => logAndExit(err))
    return data;
  }
}

javascript
let expenseData = new ExpenseData();
let myData = expenseData.listExpenses();
console.log(myData);

Esto es lo que obtengo en mi consola después de ejecutar este código:
Promesa { }

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que la función listExpenses no está devolviendo los datos como se esperaba.

    Una posible causa es que la función listExpenses no esté siendo esperada. Dado que listExpenses es una función asíncrona, debe ser esperada para que se devuelvan los datos.

    Para solucionarlo, puedes utilizar la palabra clave await antes de llamar a la función listExpenses:

    javascript
    let expenseData = new ExpenseData();
    let myData = await expenseData.listExpenses();
    console.log(myData);

    Esto debería asegurarse de que los datos sean devueltos una vez que la Promesa sea resuelta o rechazada.

Comments are closed.