异步代码行就像它的无敌
Async line of code is like its invinsible
我不太了解 javaScript,我想根据 YouTube 教程制作一个机器人。现在视频说要输入这个:
(async () => {
try {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationCommands(CLIENT_ID), {
body: commands
});
console.log("Globally");
} else {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationGuildCommands(CLIENT_ID, process.env.GUILD_ID)
, {
body: commands
});
console.log("Locally");
}
}
} catch (err) {
if (err) console.error(err);
}
})
里面的client.once("准备好",
结果是这样的:
client.once("ready", () => {
console.log("Bot is online.");
const CLIENT_ID = client.user.id;
const rest = new REST({
version: "9"
}).setToken(process.env.TOKEN);
(async () => {
try {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationCommands(CLIENT_ID), {
body: commands
});
console.log("Globally");
} else {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationGuildCommands(CLIENT_ID, process.env.GUILD_ID)
, {
body: commands
});
console.log("Locally");
}
}
} catch (err) {
if (err) console.error(err);
}
})
});
现在您可以看到它说,如果它找到客户端 ID,它应该在控制台上键入“本地”以查看它是否有效。但是终端就像它忽略了整个异步它只是说机器人在线没有任何命令。我做错了什么
与其在就绪处理程序函数中定义一个单独的异步函数,不如让就绪处理程序函数本身异步?这是一个例子:
client.once("ready", async () => {
console.log("Bot is online.");
const CLIENT_ID = client.user.id;
const rest = new REST({
version: "9"
}).setToken(process.env.TOKEN);
try {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationCommands(CLIENT_ID), {
body: commands
});
console.log("Globally");
} else {
await rest.put(Routes.applicationGuildCommands(CLIENT_ID, process.env.GUILD_ID)
, {
body: commands
});
console.log("Locally");
}
} catch (err) {
if (err) console.error(err);
}
});
这应该允许异步函数 运行。
编辑
您的 if
陈述有些不正确。您正在检查 process.env.ENV
是否等于生产,并且 else
,您再次检查它是否等于生产。我已经在这个答案中解决了这个问题。
我不太了解 javaScript,我想根据 YouTube 教程制作一个机器人。现在视频说要输入这个:
(async () => {
try {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationCommands(CLIENT_ID), {
body: commands
});
console.log("Globally");
} else {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationGuildCommands(CLIENT_ID, process.env.GUILD_ID)
, {
body: commands
});
console.log("Locally");
}
}
} catch (err) {
if (err) console.error(err);
}
})
里面的client.once("准备好",
结果是这样的:
client.once("ready", () => {
console.log("Bot is online.");
const CLIENT_ID = client.user.id;
const rest = new REST({
version: "9"
}).setToken(process.env.TOKEN);
(async () => {
try {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationCommands(CLIENT_ID), {
body: commands
});
console.log("Globally");
} else {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationGuildCommands(CLIENT_ID, process.env.GUILD_ID)
, {
body: commands
});
console.log("Locally");
}
}
} catch (err) {
if (err) console.error(err);
}
})
});
现在您可以看到它说,如果它找到客户端 ID,它应该在控制台上键入“本地”以查看它是否有效。但是终端就像它忽略了整个异步它只是说机器人在线没有任何命令。我做错了什么
与其在就绪处理程序函数中定义一个单独的异步函数,不如让就绪处理程序函数本身异步?这是一个例子:
client.once("ready", async () => {
console.log("Bot is online.");
const CLIENT_ID = client.user.id;
const rest = new REST({
version: "9"
}).setToken(process.env.TOKEN);
try {
if (process.env.ENV === "production") {
await rest.put(Routes.applicationCommands(CLIENT_ID), {
body: commands
});
console.log("Globally");
} else {
await rest.put(Routes.applicationGuildCommands(CLIENT_ID, process.env.GUILD_ID)
, {
body: commands
});
console.log("Locally");
}
} catch (err) {
if (err) console.error(err);
}
});
这应该允许异步函数 运行。
编辑
您的 if
陈述有些不正确。您正在检查 process.env.ENV
是否等于生产,并且 else
,您再次检查它是否等于生产。我已经在这个答案中解决了这个问题。