Estoy experimentando un problema que, estoy seguro, está relacionado con async/await. Entonces, lo que estoy tratando de lograr al escribir este código es que anteriormente creé una inserción con dos botones, "Aprobado" y "Denegado" (esa parte del código no se incluye arriba). Entonces, lo que quiero obtener es que si el usuario presiona el botón Aprobar, la variable de aprobación se establece en "aprobado", de lo contrario, "denegado". Y he hecho esto if (await approvalChoice != "approved") return; por lo que si el valor no se aprueba, el código dejará de ejecutarse. Pero incluso con la variable " esperar ", la variable " aprobaciónChoice " no está definida (última línea de código)
let senderID = interaction.member.user.id; const filter = i => (i.customId === `approved_${senderID}` || i.customId === `denied_${senderID}`) && i.user.id === interaction.member.user.id; const collector = interaction.channel.createMessageComponentCollector({ filter, time: 60000 }); let approvalChoice; collector.on('collect', async i => { if (i.customId === `approved_${senderID}`) { await i.update({ content: 'Operation approved.', components: [] }); approvalChoice = "approved"; collector.stop(); } else if (i.customId === `denied_${senderID}`) { await i.update({ content: 'Operation cancelled.', components: [] }); approvalChoice = "denied"; collector.stop(); } }); await collector.on('end', async (collected) => { if (approvalChoice == "approved") { await interaction.editReply({content: "_**Processing...**_"}); } else { await interaction.deleteReply(); } }); if (await approvalChoice != "approved") return;Porque el código no se detendrá allí y esperará a que finalice su recopilador y luego continúe ejecutándose.
Puede poner todo lo que debe ejecutarse después de presionar el botón en la parte collector.on('end') , o usar awaitMessageComponent en lugar del colector formado por objetos. El último envolvió el colector normal y puede esperarlo para evitar que su código siga ejecutándose antes de que el usuario presione el botón.