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.

La promesa pasa al estado pendiente y el modelo no está devolviendo el último valor insertado.

Estoy intentando devolver el último valor insertado utilizando el modelo.
Mi función es la siguiente:

async addBook(data)
{
await db.BOOK.create(data).then((BOOK) => {
console.log(“BOOK_KEY”,BOOK.BOOK_KEY);
return BOOK.BOOK_KEY;
})
}

BOOK_KEY no está imprimiendo.

let bookId = this.addBook(data)
console.log(“bookId”, bookId);

Aquí, bookId está en estado de .

bookId Promise { }

Por favor, ayúdame a mostrar bookId. Gracias de antemano.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que la función addBook está devolviendo una Promesa y no el valor real de BOOK_KEY. Para obtener el valor de BOOK_KEY, debes esperar el resultado de addBook usando la palabra clave await de esta manera:

    let bookId = await this.addBook(data);
    console.log("bookId", bookId);
    

    Al usar await, el código espera a que se resuelva la Promesa devuelta por addBook con el valor de BOOK_KEY. Sin await, el código pasa a la siguiente línea y bookId sigue estando en estado “pendiente”, ya que la Promesa aún no se ha resuelto.

    Además, en la función addBook, no es necesario utilizar tanto await como .then(). Puedes usar uno u otro. Aquí tienes una versión actualizada que solo utiliza await:

    async addBook(data) {
      const BOOK = await db.BOOK.create(data);
      console.log("BOOK_KEY", BOOK.BOOK_KEY);
      return BOOK.BOOK_KEY;
    }
    

    Esta versión elimina la llamada de retorno .then() y en su lugar asigna el resultado de db.BOOK.create directamente a BOOK mediante await. Luego, registra BOOK_KEY y devuelve el valor de BOOK_KEY directamente.

    ¡Espero que esto te ayude!

Comments are closed.