首页 > 解决方案 > Discord.js - 为来自 Reaction.users.fetch().each((user) => {...}) 的下一个用户继续循环;

问题描述

下面是一个代码片段client.on('ready', async() => {...});

this.MyServer = await client.guilds.fetch('MyServer ID here').catch(error => { console.log(error) });
this.MyRole = await this.Server.roles.cache.find((role) => role.name == `MyRole name here`);
this.MyChannel = await client.channels.fetch('MyChannel ID here').catch(error => { console.log(error) });
this.MyMessage = await this.RoleChannel.messages.fetch('MyMessage ID here').catch(error => { console.log(error) });
this.MyEmojiReaction = await this.MyMessage.reactions.cache.get('MyEmoji ID here');
this.ReactingUsers = await this.MyEmojiReaction.users.fetch();

this.ReactingUsers.each(async (user) => {
 if (!this.MyServer.members.cache.get(user.id)) return;
 if (!user.bot) {
  try {
   const member = await this.MyMessage.guild.members.fetch(user.id);
   member.roles.add(this.MyRole);
  } catch (error) {
   console.log(error);
   return;
  }
 }
});

当机器人启动时,它应该检查this.MyEmojiReaction消息this.MyMessage中、频道中this.MyChannel的反应,并将存储在角色中的反应用户添加this.ReactingUsers到角色中this.MyRole。除了一个问题外,它工作得很好。

如果用户 from不存在并且它确实存在,则if (!this.MyServer.members.cache.get(user.id)) return;in的第一行this.ReactingMembers.each(async (user) => {..}负责从函数返回,但是当它返回时,该函数永远不会为 中的下一个用户执行,可能是因为它从整个循环中返回。我想为下一个用户继续循环。this.ReactingMembersthis.MyServerthis.ReactingMembers

标签: javascriptdiscord.jsdom-eventsbotsjavascript-objects

解决方案


如果我理解正确,您应该使用continue.

相反,它将转到下一次迭代,以及数组中的下一个用户。

在你的情况下,而不是这个:

if (!this.MyServer.members.cache.get(user.id)) return;

你应该这样做:

if (!this.MyServer.members.cache.has(user.id))  continue;

推荐阅读