node.js - 将 AwaitReactions 的结果传递到函数 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 else 语句。
我尝试将我想使用的 if else 语句与 deleteDeckQuestion 的结果一起放在异步函数中,它运行良好,但是在该函数的“是”结果中,我想放置另一个异步函数来询问哪个甲板 1, 2 或 3 应该被删除并且具有相同的反应-确定-回答-问题的场景。只是在移动用户方便的情况下节省了用户打字的必要性。
我将一个异步函数放在另一个异步函数中会更容易吗?有些事情告诉我,就效率而言,这不是最好的主意。最终,这些反应将导致使用 mysql 查询,我很喜欢使用它,但它会变得非常冗长,并且其他函数中的函数看起来就像一团糟......不确定这是否是“回调地狱”的一部分我'读过虽然的乐趣...
感谢您提前提供任何帮助。
解决方案
collected
在您的then()
回调中并且reactions
是完全相同的对象。但是,result
的范围仅限于回调内。
在这个示例代码中,collected
是msg.awaitReactions(...)
' 履行承诺的结果。然后,result
在相同的范围内声明,因此可以在您需要的地方访问。
const collected = await msg.awaitReactions(filter, { max: 1 })
.catch(console.error);
const result = collected.first();
MDN:
异步编程,,,,await
范围Discord.jsthen()
:Message.awaitReactions()
推荐阅读
- go - 异常大量的 TCP 连接超时错误
- java - 如果多个用户同时工作,使用单例模式是否会使我的应用程序变慢
- python - Maya RuntimeError: OpenMaya.py (kInvalidParameter): 索引不在有效范围内
- java - 使用 GrigBagLayout 在 java 中创建一个简单的设计而不使用 swing
- python - 如何在 Linux 服务器中连接 Python、Oracle 11g 和 cx_Oracle?
- batch-file - 使用批处理脚本将浮点变量的值增加 1
- c# - .Net 领域的动态查询构建器
- unity3d - Unity OnStateExit StateMachineBehaviour 永远不会被调用
- android - 自定义 biometricPrompt
- android - 删除firebase数据库子节点时应用程序崩溃