gpt4 book ai didi

java - 如何从 Reactor 核心中的 Mono 中提取字符串

转载 作者:太空宇宙 更新时间:2023-11-04 09:28:56 28 4
gpt4 key购买 nike

我有一个Mono<String> react 器中的物体。如何从该对象获取字符串值?

我知道我可以做如下的事情:对于 Mono<String> userName ,我能做到,

userName.map(System.out::println). 

但是这会直接打印该值。我想将此字符串值存储到另一个变量中,以便我可以将该变量传递给其他一些函数。我怎样才能提取这个值?

最佳答案

要以最简单的形式直接回答问题 - 您可以使用 Mono.block() .

但你几乎肯定不应该,因为这会阻塞线程,从而破坏了首先使用 react 器的意义。相反,您应该调用 subscribe(),然后提供一个使用者。当 Mono 发出一个值时,消费者将被异步调用,并以该值作为参数。

当然,没有什么本质上可以阻止您将值分配给字段:

mono.subscribe(v -> this.value = v);

...但这在实践中的用处非常有限,因为您不知道何时该字段将被初始化。

正常的方法是一次性调用订阅者中的其他方法:

mono.subscribe(v -> {
oneMethodThatNeedsTheValue(v);
anotherMethodThatNeedsTheValue(v);
});

...或使用 Mono.cache()并传递它:

class Test {

void useMonoVal(Mono<String> mono) {
mono.subscribe(s -> System.out.println("I need to see " + s));
}

void anotherMethod(Mono<String> mono) {
mono.subscribe(s -> System.out.println("I need to talk to " + s));
}

public static void main(String[] args) {
Mono myMono = Mono.just("Bob").cache();
Test t = new Test();
t.useMonoVal(myMono);
t.anotherMethod(myMono);
}

}

(cache() 方法确保 Mono 仅评估一次,然后为所有 future 的订阅者缓存,当然,这在使用 just() 工厂时是无关紧要的,但只是为了提供一个完整的示例。)

扩展来说,使用响应式范式(以及 react 器,以及扩展其 MonoFlux 对象)的全部意义在于,它使您能够以非阻塞方式进行编码,这意味着当前的执行线程不会“等待”mono 发出值。

旁注:我不确定它是否与问题直接相关,但您不能执行 a.map(System.out::println); - 您可能是指 a.subscribe(System.out::println);

关于java - 如何从 Reactor 核心中的 Mono<String> 中提取字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57353856/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com