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