我有一个简单的任务。我想在订单中添加产品。
public Mono<OrderDTO> addProductsToOrder(String orderId, String[] productIds)
{
final List<String> productIdsList = Arrays.asList(productIds);
final Mono<Order> order = orderRepository.findById(orderId)
.switchIfEmpty(orderShouldExists(orderId));
final Flux<BaseProductInfo> products = fromIterable(productIdsList)
.flatMap(productId -> productRepository.findById(productId)
.switchIfEmpty(productShouldExists(productId)));
return order.then(combineLatest(order, products, Tuples::of)
.map(objects -> objects.getT1().addProduct(objects.getT2()))
.take(productIdsList.size())
.last()
.flatMap(orderRepository::save)
.map(orderMapper::mapToDTO));
}
我还想实现的是返回更新的订单。下面的代码不能像我希望的那样工作。有时所有的产品都被保存,有时一个也没有。我使用的数据库是被动mongo。
从您的代码中,看起来您正试图将BaseProductInfo
的列表添加到订单中并保存。您可以通过执行以下操作来实现这一点:
public Mono<OrderDTO> addProductsToOrder(String orderId, String[] productIds) {
final List<String> productIdsList = Arrays.asList(productIds);
final Mono<Order> order = orderRepository.findById(orderId)
.switchIfEmpty(orderShouldExists(orderId));
final Mono<List<BaseProductInfo>> products = fromIterable(productIdsList)
.flatMap(productId -> productRepository.findById(productId)
.switchIfEmpty(productShouldExists(productId)))
.collectList();
return order.zipWith(products).map(tuple -> tuple.getT1().addProducts(tuple.getT2)).flatMap(orderRepository::save)
.map(orderMapper::mapToDTO));
}
我用这种方法解决了这个问题。
public Mono<OrderDTO> addProductsToOrder(String orderId, String[] productIds)
{
return orderRepository.findById(orderId)
.switchIfEmpty(orderShouldExists(orderId))
.flatMap(order -> Flux
.fromArray(productIds)
.flatMap(productId -> productRepository.findById(productId)
.switchIfEmpty(productShouldExists(productId))
)
.doOnNext(order::addProduct)
.then(Mono.just(order))
)
.flatMap(orderRepository::save)
.map(orderMapper::mapToDTO);
}
我想创建一个SpringWebFlux服务,它将两个源的数据与一个依赖项相结合。我是Webflux的新手,所以我不知道怎么做。下面是一些伪代码来说明我要做的事情: 的结果包括我想用查找的数据的标识符。至少我想处理这两个数据集。我可以使用什么方法代替第一个?
我有一个 其中func()返回Mono。将此对象列表转换为并从流返回的最简单方法是什么?
问题方法需要等待单声道操作结果,在通量操作中使用,并返回通量。 研究我希望流被Mongo反应驱动订阅并终止,所以我不订阅。如果我使用我有单声道 任务如何等待值,在通量操作中使用它并从中获取通量?
如何使用或从方法参数使用或。假设我定义了接口,如下所示,其中使用创建employee对象 但是可以使用对象来完成,如下所示。 但是有没有办法直接使用或来消费呢?
我的理解是单声道 我说得对吗? 如果没有,单声道之间的区别是什么
我的代码如下。我需要从mongo db获得每次旅行的车费,然后将每次旅行的所有车费相加,得到总车费。我被一种我不知道如何阅读的单声道音乐所困扰。我试着把它转换成通量,但我得到了通量 "'