Reputation: 2482
I am using CompletableFuture in a java application. In the following code:
testMethod(List<String> ids) {
for(String id : ids) {
CompletableFuture<Boolean> resultOne = AynchOne(id);
CompletableFuture<Boolean> resultTwo = AynchTwo(id);
CompletableFuture<Boolean> resultThree = resultOne.thenCombine(resultTwo, (Boolean a, Boolean b) -> {
Boolean andedResult = a && b;
return andedResult;
});
resultThree.thenApply(andedResult -> {
if(andedResult.booleanValue() == true) {
forwardSucccess(**id**);
}
return null;
});
}
}
void forwardSucccess(String id) {
// do stuff in the future
}
, the "id" is local to testMethod(), and thus I don't believe in the future context (at thenApply()). I have it in the code snippet where you see forwardSuccess(id), but since its not part of a futures, its probably null or undefined at the time "forwardSuccess(id)" is executed.
Is there a way to introduce the "id" into the futures somehow?
Thanks for any ideas.
Upvotes: 1
Views: 2220
Reputation: 2482
My original coding was close to being correct. The value of the variable "id" is correct at the future time because its value in context of the for-loop is automatically forwarded by the magic of CompletableFuture. If this was obvious to others, it was not to me (which is why I posted !).
Other than that realization, I simplified the logic some (based on the useful comment by Mr Holger above).
testMethod(List<String> ids) {
for(String id : ids) {
CompletableFuture<Boolean> resultOne = AynchOne(id);
CompletableFuture<Boolean> resultTwo = AynchTwo(id);
CompletableFuture<Boolean> resultThree = resultOne.thenCombine(resultTwo, (a,b) -> a && b);
resultThree.thenApply(andedResult -> {
if(andedResult == true) {
forwardSucccess(id);
}
return null;
});
}
void forwardSucccess(String id) {
// do stuff in the future
}
Upvotes: 2