【问题标题】:UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'get' of undefinedUnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“get”
【发布时间】:2019-09-11 18:41:20
【问题描述】:

我的机器人日志中有这个错误

-(node:315) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'get' of undefined

at guildInvites.find.i (/app/server.js:477:46)

    at Map.find (/rbd/pnpm-volume/e510aebc-aa8d-41e6-bdbe-632fceb24fc5/node_modules/.registry.npmjs.org/discord.js/11.5.1/node_modules/discord.js/src/util/Collection.js:506:11)

at member.guild.fetchInvites.then.guildInvites (/app/server.js:477:33)

    at <anonymous>

    at process._tickCallback (internal/process/next_tick.js:189:7)

(node:315) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 355)

这是代码

const invites = {};
const wait = require('util').promisify(setTimeout);
client.on('ready', () => {
  wait(1000);
  client.guilds.forEach(g => {
    g.fetchInvites().then(guildInvites => {
      invites[g.id] = guildInvites;
    });
  });
});

 member.guild.fetchInvites().then(guildInvites => {
    const ei = invites[member.guild.id];
    invites[member.guild.id] = guildInvites;
    const invite = guildInvites.find(i => ei.get(i.code).uses < i.uses);
    const inviter = client.users.get(invite.inviter.id);
    if(!inviter) inviter = `I can\'t figure out how ${member.displayName} joined the server.`;

我不知道如何解决它,这不是所有代码,我只是发送了一部分代码,但这是错误所在

请有人告诉我如何处理 Promise bc 我认为这是问题所在 例如这是一个代码我该如何处理它

client.on("message", async message=>{
  if (message.isMentioned(client.user)){
let msg = await message.channel.send("xxx")
msg.edit(`xxx`)
}
});

【问题讨论】:

  • Ì如果invites 中没有针对特定公会的邀请,则 ei 将为空/未定义并导致此问题。您需要在代码中处理这种情况
  • 虽然我错过了下一行的第二个get - client.users.get。这也可能是来源
  • 好的,我该如何处理
  • @fredrik 如果在事件发出时定义了变量,则机器人没有缓存来比较当前邀请;它需要监听器被执行之前设置。

标签: javascript node.js discord.js


【解决方案1】:

当添加到新服务器时,您当前的代码不会为其设置invites 对象。如果用户加入,并且添加后机器人尚未重新启动,则ei (invites[member.guild.id]) 将不会被定义。这是您的错误的根源。

要解决此问题,请将侦听器附加到客户端的 guildCreate 事件,该事件在 invites 中定义公会的属性。

client.on('guildCreate', async guild => invites[guild.id] = await guild.fetchInvites());

【讨论】:

    猜你喜欢
    • 2021-05-20
    • 2021-04-18
    • 2020-11-11
    • 1970-01-01
    • 2021-09-28
    • 2021-05-18
    • 2021-01-15
    • 2021-03-03
    • 2021-04-09
    相关资源
    最近更新 更多