【问题标题】:Vertx Future Object returns nullVertx 未来对象返回 null
【发布时间】:2018-01-31 21:26:52
【问题描述】:
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


    【解决方案1】:

    Vert.x Future 与 Java Future 不同,不会阻塞。

    换句话说,当你用 Java Future 编写 future.get() 时,它会阻塞调用者直到未来完成,而 future.result() 和 Vert.x Future 会立即返回,无论未来是否是完成。

    Vert.x Future 没有阻塞,因为 Vert.x 代码运行在永远不能阻塞的事件循环上。

    如果你想要结果,设置一个处理程序

    future.setHandler(ar -> {
      if (ar.succeeded()) {
        // get ar.result()
      } else {
        // deal with ar.cause()
      }
    });
    

    【讨论】:

    • 通过rxjava获取怎么样?你对此有什么看法吗?
    • 如果您需要组合数据/事件源或动态转换数据,RxJava 很有意义。对于简单的用例,坚持使用核心 Vert.x 就可以了。
    猜你喜欢
    • 1970-01-01
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多