开发者问题收集

TypeError:无法读取未定义的属性(读取“catch”)

2021-12-12
18366

我试图通过 id 或 mention 获取频道,代码本身可以工作,但是当用户提供错误的 ID 时,它会显示:TypeError:无法读取未定义的属性(读取“catch”)

有人能帮帮我吗?

我试过这个:

message.guild.channels.cache.find(channel => channel.id == args[0]).catch(err => {});

还有这个:

message.guild.channels.cache.get(args[0]).catch(err => {});

这两件事都给了我错误。

这是代码:

if (args[0].startsWith("<#")) channel = message.mentions.channels.first();
        else channel = message.guild.channels.cache.get(args[0]).catch(err => {
    //do stuff
    })
    
2个回答

好的,我在@JeremyThille 的帮助下找到了答案: `当 id 错误时,它会尝试 null.catch()

我从代码中删除了 catch 并添加了

if(!channel) //do stuff

谢谢 @JeremyThille

T1ranexDev
2021-12-12

错误 TypeError: 无法读取未定义的属性(读取“catch”) 意味着您正在对 undefined 调用 catch

基本上,它是 undefined.catch() 。 假设您正在使用承诺,当被调用的方法不存在于对象中时,可能会发生这种情况。 例如


const myObj = {
  fun1: async () => {
    const res = await callingExternalFun();
    if (res.error) {
      throw new Error('my error');
    }
  },
};

myObj.fun1().catch((e) => {console.log(e.message)}); // my error
myObj.fun2().catch((e) => {console.log(e.message)}); // TypeError: Cannot read properties of undefined (reading 'catch')

在这里,myObj 具有异步函数 fun1 ,可能会返回错误。因此,此处的 .catch 来自 Promise.prototype.catch()

但是, myObj 没有函数 fun2 ,它是 undefiend ,并且 catch 将返回此错误。

MagicKriss
2022-10-06