当 ClientEmitter 出错时运行函数
Posted
技术标签:
【中文标题】当 ClientEmitter 出错时运行函数【英文标题】:Run a function when a ClientEmitter has an error 【发布时间】:2020-02-28 13:08:41 【问题描述】:我正在使用一个事件处理程序,其中每个事件代码都在它自己的文件中。我将事件附加到客户端,因此当该文件发出事件时,它将运行该代码:
// looping through all event files
client.on(file.split('.')[0], require(`events/$file`).bind(null, client, Util);
如果事件文件是message.js
,则类似于:
client.on('message', require('events/message.js').bind(null, client, Util);
所以当message
事件发出时,它会运行message.js
文件,传递client
和Util
类。
我还有一个附加到client
的函数,称为report
。它基本上会在出现错误时报告。我想要它,所以每当来自客户端的任何事件出现错误时,它都会运行该函数。
我已经使用以下命令稍微完成了此操作:command.run(...).catch(error => client.report(error))
.
有没有类似的方法可以做到这一点,而不必在所有事件文件中的所有代码周围放置一个 try-catch?
【问题讨论】:
您在寻找client.on('error', (error) => client.report(error));
吗?
【参考方案1】:
错误处理应该是上下文驱动的。这意味着你的机器人对错误的响应应该取决于它在做什么、在什么渠道等——既用于调试,也用于最终用户关于发生了什么的信息。如果让错误一直传播到未捕获的异常,您将错过所有上下文,并且无法创建错误消息,用户只会看到机器人没有响应并认为它已关闭或命令坏了。
我的建议:为最常见的错误生成函数创建辅助方法,用错误处理包装它们。我这样做主要是为了发送消息,因为有很多事情可能会导致消息发送失败,超出您的控制范围,并且处理包括生成错误消息并尝试在频道中发送或将其发送给用户,如果失败了。
【讨论】:
【参考方案2】:试试这个方法
client.on('error', require('events/report.js').bind(null, client, Util);
【讨论】:
以上是关于当 ClientEmitter 出错时运行函数的主要内容,如果未能解决你的问题,请参考以下文章
Python 模块 Cupy 函数在使用 cupy.einsum() 时出错
部署到 Elastic Beanstalk 时出错:chown /var/app/staging/bin/python:没有这样的文件或目录