我有需要与两个反应性依赖项交互的代码——保存到数据库和发布到流,每个都返回Mono
实例。在这之后,我需要做更多的处理——所有这些都使用我开始时的原始对象,类似这样:
val myObject = Mono.just(“thing”);
myObject.flatMap(repository::save)
.flatMap(stream::publish)
.map(obj -> moreProcessing(obj));
但问题是,repository.save
不会返回我感兴趣的对象的Mono
,stream.publish
也不会返回。
我可以实现我想要的东西,比如:
myObject.flatMap(obj -> repository.save(obj).then(Mono.just(obj))
.flatMap(obj -> stream.publish(obj).then(Mono.just(obj))
.map(obj -> moreProcessing(obj));
i、 e.映射到依赖函数只是为了得到它们的行为,然后再直接映射回来,但这似乎很奇怪-好像我可能缺少了更好的方法来使用API,它没有给出我在类型之间映射的提示,因为这不是我真正使用的flatMap
。
我也可以选择这样的方式:
myObject.flatMap(obj ->
repository.save(obj)
.flatMap(x -> publisher.stream(obj))
.map(x -> moreProcessing(obj)));
但这似乎也不是一个好方法,因为即使在相对简单的情况下,它也会导致难以维护的代码。
思想?
避免失去任何推荐人的一种方法可能是这样的:
Mono<User> monoUser = userRepository.findByUsername(username)
.filter(u -> validatePassword(pass, u.getPassword()));
Mono<Clinic> monoClinic = monoUser.flatMap(u -> clinicRepository.findByUserId(u.getId()));
return Mono.zip(monoUser, monoClinic, (u,c) -> proccess(u, c));
第一单声道返回用户,第二单声道使用第一单声道返回的用户并返回诊所,返回的单声道(第三单声道)使用第一单声道的输出和第二单声道的输出来创建不同的对象(通过使用用户和诊所的过程方法返回)
你试过吗?如果
rightGenerator
的结果为空(没有下一个信号),它的行为就像您希望的那样,但有一个限制,即它立即完成。因此,您需要返回一个可选
,或者使用然后返回
或开关ifempty
。
我有一个类似的问题,我用下面的代码解决了它。我认为不惜一切代价不要迷失在方法链接中是很重要的。因为创建难以阅读的结构非常容易。
@Test
public void mergeMonos(){
Mono<String> myObject = Mono.just("my object");
Mono<String> savedToDB = saveToDb(myObject);
Mono<String> savedToStream = saveToStream(myObject);
//if you need to wait for the first two to complete
Flux.concat(savedToDB, savedToStream, myObject)
.last()
.subscribe(System.out::println);
//if you don't need to wait for the db and stream
Flux.merge(savedToDB, savedToStream, myObject)
.last()
.subscribe(System.out::println);
}
private Mono<String> saveToStream(Mono<String> myObject) {
return myObject.map(t-> "saved to stream");
}
private Mono<String> saveToDb(Mono<String> myObject) {
return myObject.map(t-> "saved to db");
}
好吧,所以我有下面的方法,但我试图摆脱使用。块(),因此尝试实现Mono,但得到错误< code >所需的类型:List 原始代码 我尝试以非阻塞方式重构使用 Mono
问题内容: 在ServiceStack网站上列出,它表明ServiceStack可以在Mono上运行,并且可以: XSP mod_mono FastCgi 安慰 这些不同的配置是什么?Mono上的Web Services首选哪种配置? 问题答案: Linux更新 从v4.5.2版本开始, ServiceStack现在支持.NET Core,它比Mono有了显着的性能和稳定性改进,Mono是从共享的
我的代码是这样构造的- 我正在努力实现这一点: 方法1()返回地址时,我需要使用它并调用方法2()来更新MongoDB文档中的地址。也没有抛出异常。但是我没有看到任何日志在方法2() 代码: 虽然调用了method2(),但MongoDB中的文档更新没有发生。
我是整个Spring反应性网络流量的新手。我的问题很简单。在我的addActions()我试图得到一个单声道通过调用getMONtVal()。这工作罚款。但是我需要得到它的值并更新一个属性(submission.state瓦尔)。然后传递调用CustService.addActions(),返回Mono。可以做到这一点而不使用块()?
问题内容: 我有一个名为test1.py的脚本,该脚本不在模块中。它只包含应在脚本本身运行时执行的代码。没有函数,类,方法等。我有另一个作为服务运行的脚本。我想从作为服务运行的脚本中调用test1.py。 例如: 文件service.py 我知道一种方法是打开文件,读取内容并进行基本评估。我假设有一种更好的方法。或者至少我希望如此。 问题答案: 这样做的通常方法如下。 test1.py servi
我希望表的所有都具有,其被的重写。 结果应该变成: 我可以通过单独的查询获得它,例如: 第二个查询的结果应该合并到第一个查询中,这样:“当第二个表中的boolean为TRUE时,用第一个表覆盖第二个表的结果” role_cap和enduser_cap表中的正确值都应该成为结果的一部分。但是,如果对于相同的user_cap_id,role_cap有FALSE条目,而enduser_cap有TRUE条