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

Reactor3-如何在单核错误时返回通量?

澹台季萌
2023-03-14

这是样板代码:我想做这样的事情-

public Flux<Object2> getSomething(String email) {
    method1(email).map(result -> {  //method1 returns Mono<Object1>
        if(result.id().isEmpty()) {
            return method2(email); //method2 returns Flux<Object2>
        } else {
            return Flux.empty();
        }
    };
});

因此,当method1返回空的Object1时。id(),则只调用method2。否则返回空流量。

需要注意的指针是-

>

  • 没有到达第二个方法调用

    因为一个方法是Mono,另一个是Flux,所以如果我直接在第2行中添加返回,就会出现类型不匹配。

    我尝试了方法1:

    if(Object1.id().isEmpty()){
    
       throw new IllegalArgumentException;
    }
    

    在上面的代码片段中:

    try {
        method1(email);
    } catch(IllegalArgumentException e) {
        return method2(email);
    }
    

    这里从不例外。

  • 共有2个答案

    慕冠宇
    2023-03-14

    应该使用switchIfEmpty()运算符。

    另外,如果您想从方法返回两种类型(Mono和Flux),那么将返回类型更改为org。反应流。出版商不过,我不推荐这样做。

    而不是返回通量。即使只有1个数据要返回,也可以作为流量返回。将Mono转换为Flux,如果为空,则用户切换IfEmpty操作符以发送不同的Flux流。

    龙德润
    2023-03-14

    您的第一个代码片段不应该编译,因为方法实现没有重新调整任何内容,所以我将尝试猜测发生了什么。

    这里不会发生任何事情,因为方法没有返回您正在创建的发布服务器。如果没有任何东西订阅该通量/单声道,则不会发生任何事情。

    public Flux<Object2> getSomething(String email) {
        return method1(email)
                  .filter(result -> result.id().isEmpty())
                  .flatMapMany(result -> method2(email));
    }
    

    然后,您可以使用filter过滤掉结果,如果谓词不满足,则不从该Mono发出任何内容。此外,flatMap很多将帮助您在这里将结果转换为理论收益类型。

     类似资料:
    • null 但如果有例外,我该怎么办? null

    • 问题内容: 当我在Go中编写函数时,它应该返回一个值和一个错误,例如 我想在goroutine中执行此createHashedPassword,我想通过通道传递数据。 但是我的问题是,如何在此处或goroutine中处理错误? 问题答案: 通常将多个输出捆绑到一个结构中,然后通过一个通道将它们一起返回。

    • 问题内容: 我想创建一个向其提交表单的Web服务,并在出现错误的情况下返回一个JSON编码列表,告诉我哪个字段是错误的。 目前,我仅收到错误消息列表,但没有html ID或出现错误的字段名称 这是我当前的代码 这会给我一个像 但是我真正想要的是 我该如何实现? 问题答案: 我终于在这里找到了解决此问题的方法,它只需要进行一些小改动就可以适应最新的symfony更改,并且它的工作原理很吸引人: 解决

    • 问题内容: 我正在使用带有jQuery的ASP.NET MVC。我有以下MVC操作,返回成功页面的一部分。关于“应用程序错误”,我不确定要在客户端正确处理它的方式发送什么: 以下是我的jQuery ajax调用。请注意,我正在检查数据长度以确保没有错误。请建议我这样做的更好方法。 问题答案: 我会在您的ajax调用设置中添加一个错误函数。让服务器确定要显示的错误消息,然后将其传递给ajax错误处理

    • 我正在学习webflux的反应式编程,为此我迁移了一些代码。 例如,我试图迁移此方法: 总结代码,如果respository返回所有请求的疫苗,则应返回结果,否则应返回错误。 为此,我这样想,但不起作用: 我做错了什么? 我的第一个疑问是,如果过滤器最后有一个equals方法,为什么它是一个Long的Mono。我的问题是评估过滤器以返回列表或错误。

    • 问题内容: 假设我有一个像 然后在主要我有代码 显然,无论json格式不同,上述代码都会产生nil错误。Go中的json.Unmarshal()什么时候返回错误? 问题答案: 如果源中的值与目标中的值不对应,则JSON解码器不会报告错误。例如,如果源包含“状态”字段,这不是错误,但目标没有。 在其他情况下,Unmarshal函数确实会返回错误: 语法错误 类型不匹配 游乐场的例子