CompletableFuture - 如何在未来结果中使用局部变量
CompletableFuture - How to Use Local Variable in a Future Result
我在 java 应用程序中使用 CompletableFuture。在以下代码中:
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
}
,“id”是 testMethod() 本地的,因此我不相信未来的上下文(在 thenApply())。我在您看到 forwardSuccess(id) 的代码片段中有它,但由于它不是期货的一部分,因此在执行“forwardSuccess(id)”时它可能为 null 或未定义。
有没有办法以某种方式将“id”引入期货?
感谢任何想法。
我的原始编码接近正确。变量“id”的值在未来是正确的,因为它在 for-loop 上下文中的值被 CompletableFuture 的魔法自动转发。如果这对其他人来说很明显,但对我来说却不是(这就是我发帖的原因!)。
除此之外,我还简化了一些逻辑(基于上面 Holger 先生的有用评论)。
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
}
我在 java 应用程序中使用 CompletableFuture。在以下代码中:
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
}
,“id”是 testMethod() 本地的,因此我不相信未来的上下文(在 thenApply())。我在您看到 forwardSuccess(id) 的代码片段中有它,但由于它不是期货的一部分,因此在执行“forwardSuccess(id)”时它可能为 null 或未定义。
有没有办法以某种方式将“id”引入期货?
感谢任何想法。
我的原始编码接近正确。变量“id”的值在未来是正确的,因为它在 for-loop 上下文中的值被 CompletableFuture 的魔法自动转发。如果这对其他人来说很明显,但对我来说却不是(这就是我发帖的原因!)。
除此之外,我还简化了一些逻辑(基于上面 Holger 先生的有用评论)。
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
}