代码之家  ›  专栏  ›  技术社区  ›  Bibek Shakya Dev. Joel

Mono<T>和Flux<T>作为函数中的参数

  •  2
  • Bibek Shakya Dev. Joel  · 技术社区  · 6 年前

    用例是什么 Mono<T> Flux<T> 作为函数中的参数。

    密码

    Flux<String> findByLastName(Mono<String> lastname) {
       //implementation
    }
    

    当我从rest调用上述方法时,与不使用有什么区别 String.class 作为参数?

    2 回复  |  直到 6 年前
        1
  •  2
  •   Ismail Marmoush    6 年前

    要回答您的第一个评论问题:

    @ErwinBolwidt我知道Mono/Flux在计算中的使用情况,但我不明白具体使用它作为方法参数Bibek Shakya

    当你把它作为一个参数使用时,你必须把它当作一个流来处理(这意味着你还没有它),所以举个例子,你永远不应该说lastname。block(),因为这意味着您刚刚阻塞了线程,直到该值可用。


    免责声明额外信息

    如果你问从现在起是否应该用Mono或flux包装任何东西,那么当然不是,因为这会给方法和调用方增加不必要的复杂性。

    从设计的角度来看,答案很简单,问一些基本的问题:

    • 一般什么时候使用单声道?
      • 当你还是没有价值的时候。
    • 一般什么时候使用助焊剂?
      • 当你有数据流或没有数据流时。

    因此,我们不应该考虑谁在使用这种方法,而应该尽量使这种方法对他方便,但实际上我们应该考虑这种方法的需要。

    这种方法的一个用例是,该方法实际上需要以这种方式进行论证;这意味着您实际上在内部进行流处理,例如,您的方法接受无限多的传感器数据流,并且内部的方法变得疯狂,比如:

    Flux<Point> processSensor(Flux<Double> data){ return data.filter(blabla).zipWith(blabla).map(...); }

        2
  •  0
  •   Flavouski    6 年前

    只有用例我能想到为什么方法参数是 Mono<String> lastname

    1. 从WebClient/Router类型函数中检索
    2. @Secured("ROLE_EVERYONE") 在以前的方法中用于检索 lastname

    要使其工作,方法的返回类型必须是 组织。反应流。出版商(即Mono/Flux)。