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

FluxSink。next()如果用户在处理器中引发错误,则引发错误/异常

江琦
2023-03-14
   Flux.<Integer>push(sink -> {
        try {
            for (int i = 0; i < 10 && !sink.isCancelled(); i++) {
                sink.next(i);
            }
            sink.complete();
        } catch (Exception e) {
            System.out.println("Error in wrong place " + e);
        }
    })
            .doOnNext(i -> { if (i % 5 == 0) throw new RuntimeException("Error"); })
            .subscribe(i -> System.out.println("i = " + i));

此代码的输出是

  `Error in wrong place reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.RuntimeException: Error` 

这意味着异常将由<代码>接收器重新引发。下一步(i) 在推送方法和非推送错误反应通道中。为什么?

共有1个答案

雷锋
2023-03-14

它被推送到流量错误通道,但您在此通道上没有错误订阅者,您可以添加:

.doOnError(e -> System.out.println("Now error in good place = " + e))

.subscribe(i -> System.out.println("i = " + i), e -> System.out.println("Now error in good place = " + e));

完整代码为:

   Flux.<Integer>push(sink -> {
        try {
            for (int i = 0; i < 10 && !sink.isCancelled(); i++) {
                sink.next(i);
            }
            sink.complete();
        } catch (Exception e) {
            System.out.println("Error in wrong place " + e);
        }
    })
            .doOnNext(i -> { if (i % 5 == 0) throw new RuntimeException("Error"); })
            .doOnError(e -> System.out.println("Now error in good place = " + e)) //it's missing
            .subscribe(i -> System.out.println("i = " + i));

另请参阅此答案,为什么您需要订阅者和标准(fox Next())订阅者没有抛出错误:当使用来自项目处理者的Flux时,生成和处理异常的正确方法是什么

 类似资料:
  • 问题内容: 如果我 在表上有,如何抛出错误以阻止对该表进行更新? 问题答案: 这是一种可行的技巧。这不是干净的,但看起来可能可行: 本质上,您只是尝试更新不存在的列。

  • 你有什么想法吗??我不知道该怎么办了:/ 13449[MyScheduler_Worker-1]错误org.quartz.core.jobrunshell-Job group1.jobreport引发了一个未处理的异常:java.lang.nullpointerexception at com.changes.bean.reportsbean.createpdfCriticalChanges(re

  • 我有一个程序,当一个按钮被点击时,radiobuttons改变文本。我还希望所有的radiobuttons在按钮被按下后都被取消选择。我的OnClickListener中有以下代码: 我收到以下错误:.ClearCheck()上的“无法解析方法”。 我哪里错了?

  • 我有一个异步函数,它将一些数据插入数据库(使用Mariadb)。由于重复的唯一键,此插入可能会失败,因此它会抛出错误(实际上确实如此),但当我尝试再次抛出它以通过Promise捕获它时,它不起作用;它似乎总是以成功的案例结束,即使它抛出了错误。 我尝试改变then/catch顺序,我使用了< code > reject(err);而不是< code >抛出err但是这些都不起作用。 这是POST声

  • 问题内容: 当我在终端上键入以启动REPL时,它将引发此错误 当我敲击并键入时,它再次抛出该错误 我正在使用并给 问题答案: 更新到新的Scala版本(2.10.3+)或将Java降级到Java 6/7。正如您在输出中所看到的,2.9.2在引入Java 8()之前就已经很久了,因此它们不能很好地协同工作。 这个重复的问题包含有关ubuntu的Java降级的确切说明。

  • 问题内容: 我正在尝试在 Python中* 运行 PhantomJS 驱动程序,但出现错误。我读过我应该将整个路径作为参数传递,但这没有帮助。 * 这是代码: 错误: 你知道我在做什么错吗? 问题答案: 用原始字符串创建路径,并添加“ r”: