Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

105
Views
¿Por qué mi cadena de promesas sigue ejecutándose simultáneamente?

Quiero asegurarme de que la base de datos se abra correctamente, luego ejecutar la instrucción get y luego enviarla. Pero soy el siguiente en la consola donde se ejecuta simultáneamente. ¡Gracias por adelantado!

Registro de la consola:

 here1 here2 usergp is undefined usergp in get is 10931

Salida deseada:

 here1 usergp in get is 10931 here2 usergp is 10931

Código:

 let selectGP = 'select gp from Money where userID = ? and guildID = ?'; let userGP; let db; const openDB = new Promise(resolve => { db = new sqlite3.Database('./Toothless.db', (err) => { if (err) { console.error(err.message); } }); resolve(); }); x = openDB.then(() => { console.log('here1'); db.get(selectGP, [interactionUserID, interactionGuildID], (err, row) => { if (err) { console.log('in test > select GP'); } else { userGP = row.gp; console.log('usergp in get is ' + userGP); return userGP; } }); }).then((data) => { console.log('here2'); console.log('usergp is '+ data); interaction.reply({ content: 'you have ' + data , ephemeral: true }); db.close(); }).catch(() => { console.log('in catch'); });
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

  • no está devolviendo ningún valor del primer paso de la cadena de promesa, por lo que la rompe, por lo que los data en el siguiente paso siempre permanecerán vacíos.
    ¿ db.get devuelve una promesa? si es así, puede devolver eso (o declarar el primer paso como una función async , y devolver el valor esperado, es decir, return await db.get(...) . como se menciona en los comentarios, async / await no es el punto aquí, es solo otra forma de expresar el flujo asíncrono anidado que está buscando)
    en cualquier caso, también debe omitir la devolución de llamada db.get y mover esa lógica then la devolución de llamada.

  • sería una buena idea arrojar cualquier error de la base de datos (después de iniciar sesión o lo que sea), para que sea capturado por el último paso catch()

si su objetivo es cambiar el orden de ejecución, y db.get no proporciona promesas con las que trabajar, puede envolverlo usted mismo con una promesa (tedioso), o usar una biblioteca de ayuda para tales flujos, como async , que también Tiene utilidades para este tipo de envolturas (fácil).

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!