【发布时间】:2021-01-10 05:52:43
【问题描述】:
async function displayEmbed(args, msg) {
var bridgeembed = await getBridgeClutcherStats(args, msg) //should set bridgeembed to an embed
var omniembed = await getOmniClutcherStats(args, msg) //should set omniembed to an embed
var extembed = await getExtClutcherStats(args, msg) //should set extembed to an embed
var desccc = "```Bridge Clutch: ????```\n" + "```Omni Clutch: ⚛```\n" + "```Extension Clutch: ????```\n";
new Menu(msg.channel, msg.author.id, [{
name: "main",
content: new MessageEmbed({
title: "Please Choose a Gamemode",
description: desccc,
url: "https://3d4h.world",
color: 16711935,
author: {
name: args[1],
url: `https://namemc.com/profile/${args[1]}`,
icon_url: `https://mc-heads.net/body/${args[1]}`
}
}),
reactions: {
"????": "stop",
"????": "bridgeclutch",
"⚛": "omniclutch",
"????": "extclutch"
}
},
{
name: "bridgeclutch",
content: bridgeembed,
reactions: {
"◀": "main"
},
name: "omniclutch",
content: omniembed,
reactions: {
"◀": "main"
},
name: "extclutch",
content: extembed,
reactions: {
"◀": "main"
}
}
]);
}
所以在创建嵌入菜单之前,我一直在尝试运行三个函数。我遵循了这些 (How to synchronously call a set of functions in javascript) 步骤,但 bridgeembed、omniembed 和 extembed 仍然以未定义的形式结束。
当我直接从函数发送嵌入时,它起作用了。我也尝试过使用这样的回调:
getOmniClutcherStats(args, msg, function(omniclutchEmbed){
getExtClutcherStats(args, msg, function(extclutchEmbed){
getBridgeClutcherStats(args, msg, function(bridgeclutchEmbed) {
new Menu(msg.channel, msg.author.id, [{
name: "main",
content: new MessageEmbed({
title: "Please Choose a Gamemode",
description: desccc,
url: "https://3d4h.world",
color: 16711935,
author: {
name: args[1],
url: `https://namemc.com/profile/${args[1]}`,
icon_url: `https://mc-heads.net/body/${args[1]}`
}
}),
reactions: {
"????": "stop",
"????": "bridgeclutch",
"⚛": "omniclutch",
"????": "extclutch"
}
},
{
name: "bridgeclutch",
content: bridgeembed,
reactions: {
"◀": "main"
},
name: "omniclutch",
content: omniembed,
reactions: {
"◀": "main"
},
name: "extclutch",
content: extembed,
reactions: {
"◀": "main"
}
}
]);
});
});
});
但只有在桥接时它才有效,对于其他人UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'content' of undefined
如何将返回或回调的嵌入保存到变量中,以便在反应菜单中访问它们?
提前致谢!
【问题讨论】:
-
为什么你的函数是嵌套的?你在哪里
return他们的任何价值? -
@O.Jones 我在函数内部返回(pastebin.com/Xzk4eQ9E 这是其中之一),我在第二次尝试中嵌套了回调。除非我错过了什么?
-
对于初学者,
await仅在您等待承诺时才会做一些有用的事情。看到您在返回承诺上没有尝试使用await的任何功能,这显然是错误的。 -
@jfriend00 基本正确(尤其是在这种情况下)。更准确的心理模型是,如果返回类型是
Promise,await会准确返回函数返回的内容except,在这种情况下,它会执行直到 promise 解决。 -
@msbit - 这意味着除非它在等待一个承诺,否则它是没有意义的。很多人一开始就认为
await有超能力知道函数中的事情何时完成。它没有任何此类权力。它所做的只是对函数返回的承诺进行操作。如果没有承诺,它就没有任何用处——因为它只是通过不变的标准返回值。这是很多人(包括OP)需要学习的。
标签: javascript node.js asynchronous async-await discord.js