我看到了一段代码,我想知道为什么我们需要一起使用 MonoCompletableFuture .

@GetMapping("{productId}")
public CompletableFuture<CartProduct> getProduct(@PathVariable UUID productId) {
    return time("CartProductFindRequest", poductService.findProduct(productId)).toFuture();
}

public Mono<Product> findProduct(UUID productId) {
    return Mono
        .when(
            Mono.fromCallable(() -> productHelper.findProductById(productId)),
            Mono.fromCallable(() -> productHelper.findProductAvailableDates(productId))

        )
        .map(t -> {
           //Function to map result  onto a product object
        });
}