J'ai les exigences suivantes.CompletableFuture obtenir le résultat du premier avenir en attente d'autres contrats à terme en fonction de la première
- CreateDocument
- Pour le document créer de nombreuses notes de version (releaseNotesFuture)
- pour le document créer de nombreuses parcelles (parcelsFuture)
- retour objectId du document créé dans 1.
c'est mon Code actuel:
public CompletableFuture<ObjectId> createDeliveryNoteDocument(String productId, List<String> releaseNotesIds) {
CompletableFuture<ObjectId> deliveryNoteFuture =
CompletableFuture
.supplyAsync(() -> sequenceServiceFeignClient.getNextValueForSequenceNameNoResponseEntity(DocumentType.DELIVERYNOTE.toString()))
.whenComplete((result, error) -> {
if (error != null)
logger.error("Unable to get next sequence number for DELIVERYNOTE sequence", error);
})
.thenCompose(seqNumber -> {
Set<ObjectAttribute> objectAttributes = new HashSet<>();
objectAttributes.add(new ObjectAttribute(Constants.Document.DOCUMENT_TYPE, DocumentType.DELIVERYNOTE.toString()));
objectAttributes.add(new ObjectAttribute(Constants.Document.DOCUMENT_NO, seqNumber));
objectAttributes.add(new ObjectAttribute(Constants.Document.PRODUCT_ID, productId));
return objectCommandService.createCustomObject(new ObjectTypeTableName(Constants.ObjectTables.DOCUMENT), objectAttributes);
});
CompletableFuture<Void> releaseNotesFuture =
deliveryNoteFuture
.thenComposeAsync(deliveryNoteId -> joinReleaseNotesWithDeliveryNote(deliveryNoteId, releaseNotesIds));
CompletableFuture<Void> parcelsFuture =
deliveryNoteFuture
.thenComposeAsync(deliveryNoteId -> changeParcelsStatusForReleaseNotes(releaseNotesIds));
return deliveryNoteFuture;
}
Comment puis-je attendre releaseNotesFuture
et parcelsFuture
complétion et puis retourner deliveryNoteFuture
résultat ou erreur si l'un des releaseNotesFuture
ou parcelsFuture
terminé exceptionnellement?
Ou 'releaseNotesFuture.thenCombine (parcelsFuture, (x, y) -> deliveryNoteFuture.join());' – Holger
merci les deux ... vous deux. Finalement, j'ai utilisé la solution de Holger parce que c'est vraiment facile. – bilak