在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()
?