当前位置: 首页 > 知识库问答 >
问题:

在3号Reactor抛出多个错误

红甫
2023-03-14
    Flux.create(sink -> {
        sink.error(new IOException());
        sink.error(new IOException());
    }).subscribe(System.out::println, System.out::println, System.out::println);

我(错误地)认为在第一个错误之后,通量将被处理,不再监听任何信号,但上面的代码创建了一个异常:

java.io.IOException
Exception in thread "main" reactor.core.Exceptions$BubblingException: java.io.IOException
    at reactor.core.Exceptions.bubble(Exceptions.java:154)
    at reactor.core.publisher.Operators.onErrorDropped(Operators.java:256)
    at reactor.core.publisher.FluxCreate$SerializedSink.error(FluxCreate.java:172)
    at main.App.lambda$f1$0(App.java:30)
    at reactor.core.publisher.FluxCreate.subscribe(FluxCreate.java:92)
    at reactor.core.publisher.Flux.subscribe(Flux.java:6447)
    at reactor.core.publisher.Flux.subscribeWith(Flux.java:6614)
    at reactor.core.publisher.Flux.subscribe(Flux.java:6440)
    at reactor.core.publisher.Flux.subscribe(Flux.java:6404)
    at main.App.f1(App.java:31)
    at main.App.main(App.java:23)
Caused by: java.io.IOException
    ... 8 more

为什么我有这个例外?

共有1个答案

史经业
2023-03-14

根据反应流,向onError()发送两次信号是非法的,当create操作符收到第二个异常时,它会删除它。有一个钩子可以用来捕获这样的情况,并用它做一些有意义的事情,但是在您的情况下,默认的实现会起作用,这只是简单地包装无关的异常并将其抛出,或者“冒泡”给调用方。

 类似资料:
  • 问题内容: 以下是JSX中我的render方法的一部分-为什么在抛出错误后分号为何?在普通的JavaScript中完全可以 问题答案: 这是因为JSX 表达式仅限于单个表达式。 ..将引发错误。 但是,您可以通过使用两个表达式来解决此问题 如果只有一个表达式,则不需要分号。 如果您希望对此有所了解,可以在返回以逗号分隔的最后一个表达式之前,在表达式中使用鲜为人知的逗号运算符进行一些本地工作: 将显

  • null 我理解Mono是一个由0或1个元素组成的流和Flux是一个由0或N个元素组成的流之间的区别。 既然Mono和Flush都在实现,为什么我们需要这两种类型,为什么不对所有内容都使用Flux呢?

  • 我需要从java调用scala代码,因此需要告诉编译器某个方法抛出某些异常。对于一个异常很容易做到这一点,但是我很难声明一个方法抛出多个异常。 这不起作用:

  • 之前提到Vert.x API是事件驱动 - 当他们都可用时,Vert.x传递事件给处理程序。 在大多数情况下Vertx要求使用一种称为event loop线程的处理程序。 如无有 Vert.x 或您的应用程序块中,event loop可以欢快地运行将事件传递给不同的处理程序提供事件陆续到达。 因为没有阻塞,event loop可以在短时间内提供大量的事件。例如一个单一的event loop可以非常

  • 我怎样才能解决这个问题?

  • 我正在学习Reactor的反应编程,我想实现注册场景,其中一个用户可以有许多帐户分配到相同的配置文件。但是,分配给配置文件的用户名和分配给帐户的电话必须是唯一的。