将AwaitReactions的结果传递到函数discord.js中

时间:2019-06-03 12:50:07

标签: node.js asynchronous discord.js

我是异步函数的新手。我想利用下面的代码向用户提问,并用X或复选标记回答该问题,以使用户获得有关是否删除某些内容以便为新条目腾出空间的答案。

以下功能可以正常工作。但是,我想将函数的结果从函数中传递出去,这样我就可以在函数之外做出if else语句,这就是我遇到的问题。

我在网上环顾四周,看到了一些与使用回调有关的东西,但是我看到的每个示例在我认为相似的地方都是不同的,所以我很困惑。而且这些示例都没有用于“不和谐反应”中,因此我不确定该去哪里。


     const agree = "✅"
     const disagree = "❌"
     let msg = await message.author.send("You have made the maximum number of decks. Would you like to delete one of your decks in order to make a new one? Please react with one of the following...")
     await msg.react(agree)
     await msg.react(disagree)


     const filter = (reaction, user) => {
     return ['✅', '❌'].includes(reaction.emoji.name) && user.id === message.author.id;
     };
     const reactions = await msg.awaitReactions(filter, {
        max: 1
        }).then(collected => {
        const result = collected.last();

        })
        return result;
        }

     deleteDeckQuestion(function(result){
        console.log(result)
        }).catch(err => console.error(err))

上面的代码导致我运行deleteDeckQuestion时将“未定义”记录到控制台。否则没有错误。我希望它使我可以在函数外部访问Results变量,因此我可以根据用户对问题的反应做出if if语句。

我尝试将要与deleteDeckQuestion的结果一起使用的if else语句放入异步函数中,并且运行良好,但是随后在该函数的“是”结果中,我想放入另一个异步函数以询问哪个卡座1、2或3应该被删除,并且具有相同的反应确定问题答案方案。只是为用户节省了不必要的输入,为移动用户提供了便利。

将一个异步函数放在另一个异步函数中会更容易吗?有人告诉我,就效率而言,这不是最好的主意。最终,这些反应将导致使用mysql查询,我很喜欢使用它,但是它会变得很冗长,并且其他函数中的函数看起来像是一团糟...不确定这是否属于“回调地狱”的一部分,我读过虽然...的快乐...

谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

collected回调中的

then()reactions是完全相同的对象。但是,result的范围仅限于回调之内。

在此示例代码中,collectedmsg.awaitReactions(...)兑现承诺的结果。然后,result在同一作用域中声明,因此可以在需要它的位置进行访问。

const collected = await msg.awaitReactions(filter, { max: 1 })
  .catch(console.error);

const result = collected.first();

MDN:Async Programmingawaitthen()scope
Discord.js:Message.awaitReactions()