如何在收集器中获取变量的值

How to get value of a variable in a collector

我遇到了一个问题,我确定这与 async/await 有关。所以我试图通过编写这段代码来实现的是,我之前创建了一个带有两个按钮的嵌入,“已批准”和“已拒绝”(这部分代码未包含在上面)。 所以我想要得到的是,如果用户按下批准按钮,approveChoice 变量将设置为“已批准”,否则 - “拒绝”。我做了这个 if (await approvalChoice != "approved") return; 所以如果这个值没有被批准,代码将停止执​​行。 但即使使用“await”,“approvalChoice”变量也是undefined(最后一行代码)

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;

因为代码不会停在那里等待收集器结束然后继续执行。
您可以将按下按钮后应该执行的所有内容放在 collector.on('end') 部分,或者使用 awaitMessageComponent 而不是对象形成的收集器。后者包装了普通收集器,您可以等待它以防止您的代码在用户按下按钮之前继续执行。