我正在使用Discord机器人,并且在反应承诺完成后需要返回一个值。
function sendDM(userTag) {
let sentMessage = undefined;
let moderator = undefined;
let status = "";
try {
client.users.fetch(userTag, false).then((user) => {
user.send("User Authentication Request -\n```Discord Tag:" + userTag + "\n" + "Date Sent: " + getDate() + "\n" + "```" + "Authorize?").then((message => {
moderator = user
sentMessage = message
message.react("✅");
message.react("❌");
}));
})
client.on("messageReactionAdd", (reaction, user) => {
if (reaction.emoji.name == "✅") {
const authorTag = client.users.cache.find(u => u.tag === moderator.tag);
if (user.id == authorTag) {
status = "complete";
console.log("Auth Request Complete");
moderator.send("Authentication request was successful.");
}
} else {
if (reaction.emoji.name == "❌") {
const authorTag = client.users.cache.find(u => u.tag === moderator.tag);
if (user.id == authorTag) {
status = "dropped";
console.log("Auth Request Dropped: User Denied");
moderator.send("Authentication request was dropped.");
}
}
}
}).then(someShit => console.log("test: " + someShit))
} catch(error) {
console.log("DM ERROR_" + error);
}
// Return would be here
}
问题是一旦用户做出反应,该函数已经返回了空的“状态”字符串。
我不是该领域的专家,但是看起来您可以将代码块包装在Promise中,然后等到您的代码解决了Promise。这样的事情可能会起作用:
async function sendDM(userTag) {
let sentMessage = undefined;
let moderator = undefined;
let status = "";
const statusPromise = new Promise((resolve, reject) => {
try {
client.users.fetch(userTag, false).then((user) => {
user
.send(
"User Authentication Request -\n```Discord Tag:" +
userTag +
"\n" +
"Date Sent: " +
getDate() +
"\n" +
"```" +
"Authorize?"
)
.then((message) => {
moderator = user;
sentMessage = message;
message.react("✅");
message.react("❌");
});
});
client
.on("messageReactionAdd", (reaction, user) => {
if (reaction.emoji.name == "✅") {
const authorTag = client.users.cache.find(
(u) => u.tag === moderator.tag
);
if (user.id == authorTag) {
resolve("complete");
console.log("Auth Request Complete");
moderator.send("Authentication request was successful.");
}
} else {
if (reaction.emoji.name == "❌") {
const authorTag = client.users.cache.find(
(u) => u.tag === moderator.tag
);
if (user.id == authorTag) {
resolve("dropped");
console.log("Auth Request Dropped: User Denied");
moderator.send("Authentication request was dropped.");
}
}
}
})
.then((someShit) => console.log("test: " + someShit));
} catch (error) {
console.log("DM ERROR_" + error);
reject(error);
}
});
status = await statusPromise;
// Return would be here
}
这可能会在代码的其他地方引入问题,因为您必须使函数异步才能使用await
关键字,但是这样,您的代码应该等待直到从promise返回值为止。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句