project-reactor - 如何在spring reactor中将两个发布者合二为一

标签 project-reactor spring-webflux

我已经实现了一个虚拟的响应式(Reactive)存储库,但我正在努力使用更新方法:

@Override
public Mono<User> updateUser(int id, Mono<User> updateMono) {
    return  //todo with getUser
}

@Override
public Mono<User> getUser(int id) {
    return Mono.justOrEmpty(this.users.get(id));
}

一方面我有新的出版商Mono<User> updateMono ,另一方面,我在 Mono.justOrEmpty(this.users.get(id)) 期间有另一个出版商.

如何将其组合在一起,进行更新并只回馈一个发布者?

我唯一想到的是:
@Override
public Mono<User> updateUser(int id, Mono<User> updateMono) {
    return  getUser(id).doOnNext(user -> {
        updateMono.subscribe(update -> {
            users.put(id, new User(id, update.getName(), update.getAge()));
            System.out.format("Updated user with id %d to %s%n", id, update);
        });
    });
}

这是正确的吗?

最佳答案

the reference guide on finding the right operator

值得注意的是,对于 Mono你有 and , when , then (注意最后一个在 3.1.0 中会变成 flatMap,而 flatmap 会变成 flatMapMany )
doOnNext更多用于诸如日志记录或统计信息收集之类的辅助操作。 subscribe 里面的 subscribe 是另一种不好的形式;一般你想要flatMap或类似的。

关于project-reactor - 如何在spring reactor中将两个发布者合二为一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45661192/

相关文章:

java - 如何在响应式(Reactive) Java 中将新对象添加到现有流中?

spring-boot - 如何像 RestTemplate 一样从 WebClient 获取 accesstoken?

java - 如何使用Spring5 WebClient进行异步调用

java - ReactiveSecurityContextHolder#getContext 返回一个空上下文

spring-webflux - 将 Flux 的结果与 Mono 的结果相结合

java - react 堆项目 : Handling fast and slow publishers

java-8 - 如何将对象保存到通量内的 react 性存储库

java - Spring WebFlux WebClient : receive part of response

spring - 使用 Redis 的 SSE 端点的奇怪行为

java - FlatMap 何时会同时监听多个源?