6
メソッドの呼び出し/結果を次の呼び出しに連鎖しようとしています。以前の呼び出しからobjBの参照を取得できない場合は、コンパイル時エラーメソッドが返されます。CompletableFuture連鎖結果
前の呼び出しの結果を次のチェーンに渡すにはどうすればよいですか?私はプロセスを完全に誤解したことがありますか?
Object objC = CompletableFuture.supplyAsync(() -> service.methodA(obj, width, height))
.thenApply(objA -> {
try {
return service.methodB(objA);
} catch (Exception e) {
throw new CompletionException(e);
}
})
.thenApply(objA -> service.methodC(objA))
.thenApply(objA -> {
try {
return service.methodD(objA); // this returns new objB how do I get it and pass to next chaining call
} catch (Exception e) {
throw new CompletionException(e);
}
})
.thenApply((objA, objB) -> {
return service.methodE(objA, objB); // compilation error
})
.get();
あなたは 'OBJAとmethodBの結果の両方を保持するタプルを返すthenApply'あなたの最初のを持っているかもしれません。あるいは、 'thenApplyAsync'ではなく' thenApplyAsync'ではなく、 'thenApply'呼び出しを1つのラムダにまとめることは機能的に同等で、' CompletableFuture'(または 'CompletionStage')を使用しているので、 –
BTWの柔軟性を与えます。 )、私は最後のステップを実行する、例えば 'whenComplete(...)'や 'handle(...) 'のような補完で' get() 'を置きます。 UIエグゼキュータ、またはWebサービスでDTOを生成して返す(エラーが発生した場合、または成功した場合)ブロッキングを避けることは、通常、Javaの先物が提供しなければならない他のものと比較して、最良の「投資」です(他のすべてが役に立ちます)。 – acelent