如何在Flux的onComplete执行后返回一个Mono?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Flux的onComplete执行后返回一个Mono?相关的知识,希望对你有一定的参考价值。
我正在尝试保存一组类别。当所有类别都保存后,将产品的类别设置为它。然后返回Product。到目前为止,我已经成功地做到了这一点。
public Mono<Product> save(Product product) {
final Set<Category> categories = product.getCategories();
Set<Category> _categorySet = new HashSet<>();
Mono<Product> _product;
for (Category category : categories) {
final Mono<Category> save = categoryService.save(category);
save.subscribe(_categorySet::add,null,()->{
product.setCategories(_categorySet);
repository.save(product);
});
}
}
如何在保存产品后返回产品,而不依赖 block()
? 我似乎找不到学习这些东西的来源。谁能给我指出好的材料。
答案
不要手动封堵webflux链,尝试使用这段代码。
public Mono<Product> save(Product product) {
final Set<Category> categories = product.getCategories();
return Flux.fromIterable(categories)
.flatMap(categoryService::save)
.collect(Collectors.toSet())
.flatMap(categorySet -> { // use `flatMap` if repository.save(product); returns `Mono<Product>`. or else use `map` if repository.save(product); returns `Product`
product.setCategories(categorySet);
return repository.save(product);
});
}
以上是关于如何在Flux的onComplete执行后返回一个Mono?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Micrometer Timer 记录异步方法的持续时间(返回 Mono 或 Flux)
仅当验证成功时如何执行 a4j:commandLink oncomplete?