Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在javascript中为discord bot从fs.readdir函数中断for循环_Javascript_Node.js_Discord_Discord.js - Fatal编程技术网

在javascript中为discord bot从fs.readdir函数中断for循环

在javascript中为discord bot从fs.readdir函数中断for循环,javascript,node.js,discord,discord.js,Javascript,Node.js,Discord,Discord.js,因此,我一直在搜索许多网站和文章,但没有很好的解释如何做到这一点 fs.readdir(`./commands`, (err, folders) => { let loop = true; for (const folder of folders) { fs.readdir(`./commands/${folder}`, (err, files) => { if (files.includes(`${command.infos.name}.js`)) {

因此,我一直在搜索许多网站和文章,但没有很好的解释如何做到这一点

fs.readdir(`./commands`, (err, folders) => {
  let loop = true;
  for (const folder of folders) {
    fs.readdir(`./commands/${folder}`, (err, files) => {
      if (files.includes(`${command.infos.name}.js`)) {
        delete require.cache[require.resolve(`../${folder}/${command.infos.name}.js`)];
        client.commands.delete(commandName);
        try {
          const newCommand = require(`../${folder}/${command.infos.name}.js`);
          message.client.commands.set(newCommand.infos.name, newCommand);
          message.channel.send(`Command \`${newCommand.infos.name}\` was reloaded!`);
          return false;
        } catch (error) {
          console.error(error);
          return message.channel.send(`There was an error while reloading a command \`${command.infos.name}\`:\n\`${error.message}\``);
        }
        return false;
      } else {
        return true;
      }
    });
    if (result === false) {
      break;
    }
  }
});
我试图做的是,当
if(files.includes(`${command.infos.name}.js`)
为true时,中断for循环,这样程序就不会继续检查其他文件夹,如果它已经找到了要重新加载的文件


我想使用
fs.readdir
,因为它是一个异步函数,但因为它是一个异步函数,所以我不能从
fs.readdir
外部更改任何值。我试着用承诺,但我似乎不明白。因此,我希望是否有其他方法可以在不删除代码异步部分的情况下中断
for
循环。

我找到了答案,这就是答案

fs.readdir(`./commands`, async(err, folders) => {
  for (const folder of folders) {
    const files = await fs.promises.readdir(`./commands/${folder}`);
    if (files.includes(`${command.infos.name}.js`)) {
      delete require.cache[require.resolve(`../${folder}/${command.infos.name}.js`)];
      client.commands.delete(commandName);
      try {
        const newCommand = require(`../${folder}/${command.infos.name}.js`);
        message.client.commands.set(newCommand.infos.name, newCommand);
        message.channel.send(`Command \`${newCommand.infos.name}\` was reloaded!`);
      } catch (error) {
        console.error(error);
        message.channel.send(`There was an error while reloading a command \`${command.infos.name}\`:\n\`${error.message}\``);
      }
      break;
    } 
  }
});

你不能从那里打破循环。更糟糕的是,您的
fs.readdir()
操作都是并行运行的,所以在您想要中断循环时,所有其他操作都已经启动了。如果要对循环中的操作进行排序,则需要使用
wait fs.promissions.readdir()
而不是现在的结构化方式。好的,我将尝试一下。您能否举例说明如何在我的代码中使用
fs.promissions.readdir()