有一个异步构造。从这里的数据库中读取后,我想继续处理。我尝试如下使用“ while”循环,但没有使用。无休止的循环。如果没有“ while”循环,则该循环是异步的,但对我不起作用。
private XmlOperations fetchAttributeFromDB(RequestContext context,
XmlOperations invCnclAttributes,String orderId) {
String strSQL = "select bankStan,bankBatch,provBank from transactionHistory where orderId='"+orderId+"' limit 1";
DBClientService dbClientService = DBClientService.getService(context);
try {
Future<List<JsonArray>> futureHistory = dbClientService.ExecuteQuery(strSQL);
futureHistory.setHandler(sqlResult -> {
List<JsonArray> result = futureHistory.result();
invCnclAttributes.addAttribute("bankStan", result.get(0).getString(0));
invCnclAttributes.addAttribute("bankBatch", result.get(0).getString(1));
invCnclAttributes.addAttribute("provBank", result.get(0).getString(2));
futureHistory.complete();
});
while(!futureHistory.isComplete());
}catch(Exception e){
e.printStackTrace();
}
return invCnclAttributes;
}
答案 0 :(得分:0)
您没有说是否可以使用Java 8(支持CompletableFuture和Streams)或Java 9(也支持“反应式” Flow API)。
假设您可以使用Java 8,并且对Futures感到相当满意。
然后您要使用CompletableFuture
。而且,正如Thilo所指出的,您肯定要使用thenApply
或thenCompose
来组成您的列表。
在否情况下,如果您完全可以避免的话,是否要使用“轮询循环”。
这是一个很棒的简短教程,它将告诉您基本概念,并提供示例代码:
Baeldung: Guide To CompletableFuture
这是我个人发现的一本书,对于理解新的Java并发API很有帮助:
Modern Java in Action: Lambdas, streams, functional and reactive programming 2nd Edition
<=第二版也涵盖了Java 9和Java 10