我这里要做的就是浏览数据库中保存的消息,检查它们是否存在,如果不存在,就删除它们,我所做的就是检查消息是否存在,如果不存在,就把它推入一个包含所有不存在消息的数组中,但代码的运行顺序不对,它在循环结束前运行if语句。例如,它会控制台记录2在1之前。如有任何帮助,我将不胜感激。
const {
reactionRoleInformation,
} = require("../database-functions/reactionroles/reactionRoleInformation");
const {
deleteManyReactionRoles,
} = require("../database-functions/reactionroles/deleteManyReactionRoles");
module.exports.cacheMessages = async (bot) => {
const messageArray = await reactionRoleInformation();
let deletedMessagesIds = new Array();
messageArray.forEach(async (message) => {
try {
await bot.guilds.cache
.get(message.guild)
.channels.cache.get(message.channel)
.messages.fetch(message.id);
} catch (err) {
deletedMessagesIds.push(message.uniqueId);
return;
}
console.log(1)
await bot.channels.cache.get(message.channel).messages.fetch(message.id);
});
console.log(2)
if (deletedMessagesIds.length !== 0) await deleteManyReactionRoles(deletedMessagesIds);
};
.forEach()
不等待异步函数。相反,使用.map和Promise.all的组合。
await Promise.all(messageArray.map(async (message) => {...}));