首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有错误传播的情况下,响应处理Discord4J中的错误

在没有错误传播的情况下,响应处理Discord4J中的错误
EN

Stack Overflow用户
提问于 2022-11-19 20:08:02
回答 2查看 34关注 0票数 1

我正在Discord4J中制造一个不和谐的机器人,使用一个返回有效命令的命令处理程序:

代码语言:javascript
复制
return Mono.just(event.getCommandName())
        .filter(commandRegistry::has)
        .map(commandRegistry::get)
        .flatMap(discordCommand -> {
            try {
                return discordCommand.executeCommand(event);
            } catch (Exception e) {
                logger.error(e.getMessage());
                return event.reply("Error occurred!").then();
            }
        })
        .then();

(discordCommand.executeCommand返回Mono)

如果我试图用doOnError来处理错误,这个错误会传播和崩溃程序。我的问题是,如何使这个反应没有错误传播。用try/catch包围整个块也不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-19 20:51:34

所有的.doOnX方法都是我们所说的“副作用”。它们不订阅任何内容,而是在满足条件时被调用。

因此,与使用try/catch不同,对于反应性,我们可以执行以下操作:

代码语言:javascript
复制
return Mono.just(event.getCommandName())
    .filter(commandRegistry::has)
    .map(commandRegistry::get)
    .flatMap(discordCommand ->> discordCommand.executeCommand(event);})
    .doOnError(e -> logger.error("an error happened", e))
    .onErrorResume(e -> event.reply("Sorry, an error occurred"));

在上面,我们使用.doOnError作为记录错误的副作用,因为在日志记录时我们不希望采取进一步的响应操作。然后,我们使用onErrorResume,它允许我们通过向用户发送回复而不是错误传播来优雅地处理错误。

票数 2
EN

Stack Overflow用户

发布于 2022-11-19 20:43:41

您可以使用onErrorResume将错误转换为"nothing“(Mono.empty()):

代码语言:javascript
复制
.onErrorResume(throwable -> {
    //Do whatever you want with the error
    return Mono.empty();
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74503306

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档