← Каталог
Рекомендации по разработке на Java — 16.3. CompletableFuture для асинхронных операций
Фрагмент из «Рекомендации по разработке на Java»: 16.3. CompletableFuture для асинхронных операций.
public class PaymentProcessor {
public CompletableFuture<PaymentResult> processPaymentAsync(PaymentRequest request) {
return CompletableFuture.supplyAsync(() -> validateRequest(request))
.thenCompose(validatedRequest -> authorizePayment(validatedRequest))
.thenCompose(authorization -> capturePayment(authorization))
.thenApply(captureResult -> buildPaymentResult(captureResult))
.exceptionally(ex -> handlePaymentError(ex, request));
}
private PaymentRequest validateRequest(PaymentRequest request) {
if (request.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
throw new IllegalArgumentException("Amount must be positive");
}
return request;
}
private CompletableFuture<Authorization> authorizePayment(PaymentRequest request) {
return paymentGateway.authorize(request);
}
private CompletableFuture<CaptureResult> capturePayment(Authorization auth) {
return paymentGateway.capture(auth);
}
} public class PaymentProcessor {
public CompletableFuture<PaymentResult> processPaymentAsync(PaymentRequest request) {
return CompletableFuture.supplyAsync(() -> validateRequest(request))
.thenCompose(validatedRequest -> authorizePayment(validatedRequest))
.thenCompose(authorization -> capturePayment(authorization))
.thenApply(captureResult -> buildPaymentResult(captureResult))
.exceptionally(ex -> handlePaymentError(ex, request));
}
private PaymentRequest validateRequest(PaymentRequest request) {
if (request.getAmount().compareTo(BigDecimal.ZERO) <= 0) {
throw new IllegalArgumentException("Amount must be positive");
}
return request;
}
private CompletableFuture<Authorization> authorizePayment(PaymentRequest request) {
return paymentGateway.authorize(request);
}
private CompletableFuture<CaptureResult> capturePayment(Authorization auth) {
return paymentGateway.capture(auth);
}
}