【发布时间】:2019-04-20 01:42:51
【问题描述】:
我从响应式存储库中获得Mono<FooBar>,基于它的值我必须创建另外两个对象使用响应式存储库保存它们,修改FooBar 对象并保存它。
由于我是响应式编程的新手,因此我使用了以下解决方案,该解决方案有效,但我不确定我是否正确使用了响应式 API:
@Test
void createAndSave() {
Mono<FooBar> fooBarMono = findFooBar() // returns Mono<FooBar>
.map(fooBar -> {
createAndSaveLoremBar(fooBar).subscribe(); // returns Mono<LoremBar>
createAndSaveDoloremBar(fooBar).subscribe(); // returns Mono<DoloremBar>
fooBar.setActive(true);
return saveFooBar(fooBar); // returns Mono<FooBar>
}).flatMap(Function.identity());
StepVerifier.create(fooBarMono)
.expectNextMatches(Objects::nonNull)
.expectComplete()
.verify();
}
来自控制台日志:
saved lorem bar
saved dolorem bar
saved foo bar
【问题讨论】:
-
激活fooBar前是否需要保存lorem bar和dolorem bar?那么 lorem 和 dolorem 保存的错误呢?我们应该忽略还是传播错误?
-
@AlexanderPankin 保存顺序无关紧要;如果可能,应该传播错误
标签: spring-data-mongodb spring-webflow project-reactor