Discord.js在事件处理程序上关闭未处理的承诺拒绝



我正试图在使用事件处理程序的discord.js机器人上关闭未处理的承诺拒绝,我在网上找到了如何做到这一点,但它似乎不适用于我的事件处理程序:我在网上发现的解决方案。

这是我的事件处理程序:

fs.readdir('./events/', (err, files) => {
files.forEach(file => {
const eventHandler = require(`./events/${file}`)
const eventName = file.split('.')[0]
client.on(eventName, arg => eventHandler(client, arg));
})
})

我的事件文件看起来像这样:

const Discord = require('discord.js');
module.exports = (client) => {
//code
}

如何将图片中的代码实现到事件处理程序中?

现在,您还没有处理discord.js库引发的错误。你有一个类似的处理程序:

module.exports = (client) => {
//code
}

这意味着,如果discord.js代码抛出错误,则没有代码来处理该错误。

你可以用一些技巧来解决这个问题。如果你是async/await的粉丝,你可以将处理程序更改为async函数,并使用try/catch来处理错误:

module.exports = async (client) => {
try {
// call discord.js code
} catch (error) {
// handle rejected promise from discord.js code
}
}

您还可以使用非异步/等待风格来处理来自承诺链的错误:

module.exports = async (client) => {
client.somePromiseIsReturned()
.then(result => {
// handle result of discord.js operation
})
.catch(error => {
// handle rejected promise from discord.js code
};
}

您发布的解决方案使用的技术是以相同的方式处理所有错误,即使用console.log记录错误消息。他们的代码是一种简洁的方法:

somePromiseIsReturned().catch(console.log);

相当于:

somePromiseIsReturned().catch(error => console.log(error));

最新更新