我已经实现了一个虚拟的响应式(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/