异步/等待 Discord.js Node.js Javascript JS

Posted

技术标签:

【中文标题】异步/等待 Discord.js Node.js Javascript JS【英文标题】:async/await Discord.js Node.js Javascript JS 【发布时间】:2021-04-25 09:26:17 【问题描述】:

嘿,我希望有人能帮我解决我的问题。

以下代码应输出:

你好 世界! 再见!

但它不会等待第二行被执行。

所以输出是 你好 再见! 世界!

const Discord = require("discord.js");
const config = require("./config.json");
const client = new Discord.Client();
const prefix = "02";

client.on("message", async message => 
    if (message.author.bot) return;
    if (!message.content.startsWith(prefix)) return;

    const commandBody = message.content.slice(prefix.length);
    const args = commandBody.split(' ');
    const command = args.shift().toLowerCase();

    if (command === "help" || command === "h" || command === "hilfe")

    console.log("Hello");
    await setTimeout(() =>  console.log("World!"); , 2000);
    console.log("Goodbye!");
    

);

client.login(config.BOT_TOKEN);

【问题讨论】:

await 关键字仅适用于承诺。 setTimeout 不返回承诺,因此它不会工作。 或者,您可以将所有console.log 代码放入您的setTimeout 中。看看这个问题Combination of async function + await + setTimeout 【参考方案1】:

您需要承诺setTimeout 逻辑,以便await 可以使用它。考虑这个sleep 函数实现。

function sleep(timeInMs) 
  return new Promise(resolve => 
    setTimeout(resolve, timeInMs);
  );


// usage
async message => 
  // …
  console.log("Hello");
  await sleep(2000);
  console.log("World!");
  console.log("Goodbye!");

【讨论】:

谢谢帮了我很多

以上是关于异步/等待 Discord.js Node.js Javascript JS的主要内容,如果未能解决你的问题,请参考以下文章

Discord.js + Node.js: SyntaxError: Unexpected token ''

如何隐藏 DiscordAPIError (discord.js) (node.js)

Node.js + Discord.js:无法读取未定义的属性“类”

node.js/discord.js:TypeError:无法读取 null 的属性“setPresence”

Node.Js 版本 14 抛出 e;不和谐机器人的错误(discord.js)

从函数中导出数据 [mysql, node.js, discord.js]