异步代码行就像它的无敌

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,您再次检查它是否等于生产。我已经在这个答案中解决了这个问题。