java - 将函数转换为可完成的自定义异常

标签 java rx-java2 vert.x

我有一个用于所有消息代理相关操作的 vertx 服务。例如交换创建函数如下所示

@Override
    public BrokerService createExchange(String exchange, 
    Handler<AsyncResult<JsonArray>> resultHandler) {
        try {
            getAdminChannel(exchange).exchangeDeclare(exchange, "topic", true);
            resultHandler.handle(Future.succeededFuture());
        } catch(Exception e) {
            e.printStackTrace();
            resultHandler.handle(Future.failedFuture(e.getCause()));
        }
        return this;
    }

我正在将整个代码库转换为 rxjava,我想将这些函数转换为可完成的。类似于:

try {
    getAdminChannel(exchange).exchangeDeclare(exchange, "topic", true);
    Completable.complete();
} catch(Exception e) {
    Completable.error(new BrokerErrorThrowable("Exchange creation failed"));
}

此外,我还希望能够在出现问题时抛出 Completable.error(new BrokerErrorThrowable("Exchange create failed")) 之类的自定义错误。这样我就能够捕获这些错误并使用适当的 HTTP 响应进行响应。

我看到 Completable.fromCallable() 是一种方法,但我还没有找到抛出这些自定义异常的方法。我该怎么办?提前致谢!

最佳答案

我能够弄清楚。我所要做的就是:

@Override
  public BrokerService createExchange(String exchange, Handler<AsyncResult<Void>> resultHandler) {
    Completable.fromCallable(
            () -> {
              try {
                getAdminChannel(exchange).exchangeDeclare(exchange, "topic", true);
                return Completable.complete();
              } catch (Exception e) {
                return Completable.error(new InternalErrorThrowable("Create exchange failed"));
              }
            })
        .subscribe(CompletableHelper.toObserver(resultHandler));

    return this;
  }

关于java - 将函数转换为可完成的自定义异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60579230/

相关文章:

java - 如何使用 Maven 安装 caldav4j?

java - 如何在 Java 中创建带有 unicode 图像的 JButton?

java - 如何在 Android 中打开具有 Uri 的文件?

rx-java2 - RxJava : Merge multiple singles and complete after some have failed

Java lambda : Class with type?

android - RxJava 的 RxSwift Variable 或 BehaviourRelay 的内置等效项

java - Vert.x 是否对单个 Verticle 具有真正的并发性?

vert.x - 顶点 NoClassDefFoundError : io/netty/channel/EventLoopGroup

java - 带参数的 VertX SQL 查询如何使用 LIKE?带通配符

java - RxJava Rx 默认是单线程的。真的吗?