Я столкнулся с проблемой при преобразовании двух потоков в однопоточный, в то время как второй поток зависит от первого потока.
В традиционном нереактивном программировании мой код был бы написан следующим образом.
public OrderEstimationsResult getEstimations(ObjectId productId, int quantity, float longitude, float latitude, ShipmentMethod shipmentMethod) {
Product product = productService.getById(productId);
ShippingEstimationResult estimation = shippingService.getEstimations(product.getWeight(), product.getLocation(), new Location(longitude, latitude), new Date(), ShipmentMethod.FAST);
float price = productService.calculatePrice(product, quantity);
return new OrderEstimationsResult(price, estimation.getEstimatedCost(), new Date());
}
Мне удалось сделать это, используя flatmap внутри flatmap в реактивном программировании.
public Mono<OrderEstimationsResult> getEstimations(ObjectId productId, int quantity, float longitude, float latitude, ShipmentMethod shipmentMethod) {
return productService
.getById(productId)
.flatMap(product -> shippingService
.getEstimations(product.getWeight(), product.getLocation(), new Location(longitude, latitude), new Date(), ShipmentMethod.FAST)
.flatMap(estimation -> {
float price = productService.calculatePrice(product, quantity);
return Mono.just(new OrderEstimationsResult(price, estimation.getEstimatedCost(), new Date()));
})
);
}
Может ли кто-нибудь сказать, использую ли я правильный / лучший подход?