如何在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?

Apollo useMutation,onCompleted完成在登录身份验证期间总是返回true?

如何从 Spring Flux 平面图操作中返回对象

Flux 和 Mono 的区别

Flux 不会在“then”之前等待元素完成