public Future<String> getString(){
Future<String> data = Future.future();
postgreSQLClient.query("select * from test", resultSetAsyncResult -> {
if(resultSetAsyncResult.succeeded()){
List<JsonObject> rows = resultSetAsyncResult.result().getRows();
data.complete("Completed...");
}
});
return data;
}
Future<String> future = getString();
System.out.println(future.result());
此返回值为空。我在这里做错了什么吗?我也尝试过 AtomicReference,它也返回 null。使困惑。
最佳答案
Vert.x Future
与 Java Future
不同,不会阻塞。
换句话说,当您使用 Java Future
编写 future.get()
时,它会阻塞调用者,直到 future 完成,而 future.result ()
与 Vert.x Future
立即返回,无论 future 是否完成。
Vert.x Future
不会阻塞,因为 Vert.x 代码在事件循环上运行,而绝不能被阻塞。
如果你想要结果,请设置一个处理程序
future.setHandler(ar -> {
if (ar.succeeded()) {
// get ar.result()
} else {
// deal with ar.cause()
}
});
关于vert.x - Vertx Future 对象返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48551722/