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

如何在spring reactor中实现两个发布器的合二为一

慕晨
2023-03-14

我已经实现了一个虚拟的反应存储库,但我正在为update方法苦苦挣扎:

@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 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);
        });
    });
}

是正确的吗?

共有1个答案

戚宏扬
2023-03-14

请参阅关于查找正确运算符的参考指南

特别要注意的是,对于mono,您有whenthen(注意,最后一个将在3.1.0中变为flatmap,而flatmap将变为FlatMapMany)

doonnext更多用于日志记录或统计数据收集等辅助操作。Subscribe内部订阅是另一种不良形式;通常,您需要flatmap或类似的文件。

 类似资料:
  • 假设我有两个外部服务。假设我们有一个item,serviceA返回item,serviceB返回item。 我想要得到的是形式的处理程序,其中和是同一查询项的对应对象。 是迄今为止我找到的最接近的东西,但它不是我想要的东西,因为订单没有promise。我在寻找像CompletableFuture::allOf这样的东西 我总是可以通过使这两个调用同步来作弊,但这会让反应式编程失去所有乐趣。或者,我

  • 问题内容: 如何使用将一个附加到另一个? 我正在使用图书馆发送到。 字典1 字典2 如何将两个字典结合在一起,制作一个新字典,如下所示? 我已经尝试过,但是出现了编译错误: 二进制运算符’+ =’不能应用于两个’[String:AnyObject]’操作数 问题答案: 请参阅很棒的Dollar&Cent项目 https://github.com/ankurp/Cent/blob/master/So

  • 如何使用Swift将一本词典附加到另一本词典? 我正在使用库将发送到。 词典1 词典2 如何组合这两个词典以生成一个新词典,如下所示? 我尝试了dict1=dict2,但出现了编译错误: 二进制运算符“=”不能应用于两个“[字符串:AnyObject]”操作数

  • 假设我有如下两个通量: 现在我想把这些通量组合成一个通量或者两个通量的元组,在一个通量中包含两个通量元素。 我使用zipwith方法尝试了以下操作: 但是这给出了一个编译时错误: 我怎样才能做到这一点?请建议。

  • 意思就是想要两个 tab页同时能获取到一个状态的更改。比如在 A 页面改的状态,在 B 页面也可以同时获取到

  • 问题内容: 我想在hibernate中实现类似于触发器的功能。 我需要的是当表中的列达到特定值时,应在另一张表中插入一行,或者应更新某些其他表。 如何在hibernate状态下实现呢? 问题答案: 这在第14章中进行了描述。 例如,您可以拦截更新后事件。 但是,将事件系统用于 业务 运营可能不是最好的主意(它们最适合用于基础结构问题)。您应该为此使用更高级别的层。