vert.x - Vertx Future 对象返回 null

标签 vert.x

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/

相关文章:

java - 如何在 Vert.x 中对 Handler<RoutingContext> 进行单元测试?

java - 使用 Java 创建 SockJS 服务器

vert.x - 在 vert.x 中,在运行时创建多个 HttpServer 实例有意义吗?

java - 如何将 S3object 转换为 Observable

java - 如何使用 vertx3 进行数据库顶部异步缓存查询和更新

netty - 使用 vertx web 客户端版本 4.0.0 时出现 java.lang.IllegalAccessError

java - Vert.x:记录到文件的最佳方式

java - 用于推送通知的正确 vertx 版本

java - Vert.x Json.decodeValue 列表

javascript - Vertx 事件总线 access_denied