javascript - 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.ReactingMembers
this.MyServer
this.ReactingMembers
解决方案
如果我理解正确,您应该使用continue
.
相反,它将转到下一次迭代,以及数组中的下一个用户。
在你的情况下,而不是这个:
if (!this.MyServer.members.cache.get(user.id)) return;
你应该这样做:
if (!this.MyServer.members.cache.has(user.id)) continue;
推荐阅读
- html - 响应式网格模板列,一列具有固定百分比宽度,第二列具有自动宽度
- kotlin - 读取一系列未定义大小的数字并打印其第一次出现的最大数字和位置
- node.js - 为什么我的环境会破坏?sha3的纱线安装错误
- javascript - 如何在Javascript中循环一个没有索引的对象数组作为字段?
- oracle - AWR 报告 Oracle OEM 中的时区更改
- python - 如何使用“列”方向将 Pandas 数据框中的索引隐藏到 JSON 函数 DataFrame.to_json()
- azure - 您可以向开发环境 AAD 令牌添加可选声明吗?
- angular - Ng-bootstrap 下拉菜单未在带有单击处理程序的表行上激活
- c# - 参数 ... 在方法中 ... 在服务中 ... 为空
- python - Django 抛出 ValueError:源代码字符串不能包含空字节