Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

115
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda