Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

190
Vistas
NodeJs: Promise siempre devuelve indefinido

Así que tengo la siguiente promesa que se supone que va dentro de mi base de datos sqlite y me dice si hay una coincidencia. Incluso si las variables son correctas, siempre devuelve indefinido.

 var checkLoanable = function(bookID){ return new Promise((resolve, reject)=>{ db.run('SELECT * FROM book WHERE id=?',[bookID],(err,row)=>{ if (err) { console.log("error") reject(); } if(row){ if(row.loanable==0){ console.log("not loanable") reject(); } console.log("success") resolve(row); }else{ console.log("undefined") reject(); } console.log("End of promise") }); }) }

Esta es la llamada de la función.

 await checkLoanable(bookID) .then(()=>{console.log("success")}) .catch(()=>{ res.status(422) .setHeader('content-type', 'application/json') .send({ message: "Failed to add loan: book is not loanable!"}); }); console.log("after promise");

La espera está dentro de una función asíncrona y después de las pruebas que hice, espera a que finalice la promesa y luego continúa con el código. Sin embargo, no puedo entender por qué siempre está indefinido. Gracias de antemano por cualquier ayuda.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

run() se usa para insertar y actualizar filas.

Para obtener una sola fila, use db.get() .

 db.get('SELECT * FROM book WHERE id=?', [bookID] , (err,row) => { });

Al menos si está utilizando el paquete npm/sqlite .

about 4 years ago · Juan Pablo Isaza Denunciar

0

No mezcle async/await y Promise chain use uno de ellos.

Ya sea con intentar... atrapar o Promise..then..catch ... entonces... atrapar

 try { const book = await checkLoanable(bookID); res.json(book); }catch ({message}) { res.status(422).send(message); } // or checkLoanable(bookID) .then((book) => {res.json(book);}) .catch(({message}) => { res.status(422).json({ message: "Failed to add loan: book is not loanable!" }); });

Para el ejemplo, si usa algo como esto

 const myPromise = () => new Promise((resolve, reject) => { setTimeout(() => { resolve('Success!'); }, 1000); }); (async () => { const result = await myPromise().then(data => { console.log({data}); }); console.log({result}); })();

El resultado sería

 {data: 'Success!'} {result: undefined}

No ambos obtienen valores al mismo tiempo.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda