我正在使用LoginScreen
做一个不和谐的机器人,该机器人从API获取数据并添加或删除与该数据关联的消息。
在下面的代码段中,如果API不再提供相应的数据,我已编写了删除消息的逻辑。
discord.js
是一个映射,其中包含gameEmbeds
作为来自API的数据的标识符和key
作为不和谐通道中消息的标识符。
val
我必须使用迭代器功能 gameEmbeds.forEach(async (val, key, map) => {
if (map !== undefined && newGames.get(key) === undefined) {
const message = await channel.fetchMessage(val);
message.delete()
.catch((e) => {
console.error(`${new Date()} `, e);
});
}
,因为要逐个处理每个条目以使UI中的更改看起来更加平滑,这违反了JS的异步特性。
我想我可以确保使用async
可以做到这一点,这也可以使此代码更快一些,但是,我不知道如何在我的代码中实现它而不破坏内容。我是node.js的新手。请帮忙。
编辑:谢谢CF256,我删除了多余的Promise.all
答案 0 :(得分:1)
我将创建一个用于容纳所有小承诺的新数组,一旦完成forEach
循环,我将在小承诺守望者上调用Promise.all
const allDeleteJobs = [];
gameEmbeds.forEach(async (val, key, map) => {
if (map !== undefined && newGames.get(key) === undefined) {
const message = await channel.fetchMessage(val);
// Push the new delete job to the array registry
allDeleteJobs.push(message.delete());
}
});
(async () => {
if(allDeleteJobs.length >= 1){
await Promise.all(allDeleteJobs);
// Delete all the messages or do other stuff
}
})()
.catch(error => console.error(error));