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

251
Visualizações
¿Cómo hacer que Discord espere a que el script termine de ejecutarse y cómo no responder a Discord antes de obtener los datos necesarios?

Soy nuevo en node.js y la programación asíncrona, así que estoy un poco confundido sobre por qué sucede esto. Estoy tratando de ejecutar un bot de discordia que me dará datos de un sitio web de terceros. Puedo consultar los datos del sitio de terceros y puedo ver los datos en mi consola. Sin embargo, los datos no pueden aparecer en discordia.

 const { SlashCommandBuilder } = require('@discordjs/builders'); const execFile = require('child_process').execFile; const path = require('node:path'); const commandsPath = path.join(__dirname, '..', 'Folder_name'); let scriptPath = path.join(commandsPath, 'querydata.js'); let output = ""; module.exports = { data: new SlashCommandBuilder() .setName('cmdname') .setDescription('blank'), async execute(interaction) { await runScript(scriptPath) await interaction.reply(output) }, }; function runScript(scriptPath) { return new Promise((resolve, reject) => { execFile('node', [scriptPath], (error, stdout, stderr) => { if (error) { console.error('stderr', stderr); throw error; } console.log(stdout); output = stdout resolve(output) }); }); }

Intenté usar Promise, async/await pero vería este error

 RangeError [MESSAGE_CONTENT_TYPE]: Message content must be a non-empty string.

Al cambiar mi código al código a continuación, obtendría este error, en el que puedo consultar los datos, pero cuando obtuve los datos, la discordia terminaría la llamada, pensando que mi bot no respondió. (El bot está en línea cuando probé esto) ingrese la descripción de la imagen aquí

 module.exports = { data: new SlashCommandBuilder() .setName('cmd') .setDescription('blank'), async execute(interaction) { runScript(scriptPath) .then(interaction.reply(output)) }, }; function runScript(scriptPath) { return new Promise((resolve, reject) => { execFile('node', [scriptPath], (error, stdout, stderr) => { if (error) { console.error('stderr', stderr); throw error; } console.log(stdout); output = stdout resolve(output) }); }); }

No lo entiendo, pensé que si usaba await entonces el script esperaría hasta que la función runScript finalice antes de responder a discord. Pero el script sigue intentando enviar la cadena de salida vacía a discordia, lo que provoca el error RangeError. Por otro lado, cuando uso el segundo bloque de código, aparece el error en Discord (el error que se ve en la imagen).

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

¡Esto debería funcionar para ti!

 async execute(interaction) { await runScript(scriptPath) .then(output => interaction.reply(output)) }

await el script, lo que literalmente significa esperar a que termine sus promesas, luego tomará el resultado y responderá con él.

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