Vertx3 - Return 来自 JDBC 连接的值? (sql 分贝)。

Vertx3 - Return a value from a JDBC connection? (sql db).

我有一个接口只有一个方法 returns "config" Object.

我想在 Android 和 Vertx3 环境中使用此接口。

Config retrieveConfig(String authCreds);

我试图在一个 vertx 程序中实现它,利用它的 JDBC 客户端,但我 运行 遇到了问题。

jdbcClient.getConnection(sqlConnResult -> 
 //checks for success
 sqlConnResult.result().query(selectStatement, rows -> {
     //get result here, want to return it as answer to interface.
     //seems this is a "void" method in this scope.
});

这个接口甚至可以用 Vertx 异步代码实现吗?

Async programming 中,您不能真正 return 您对调用者的价值,因为这将是一个阻塞调用 - async programming 试图删除的主要内容之一。这就是为什么在 Vertx 中有很多方法 return thisvoid.

作为替代方案存在各种范例:

  • Vert.x 广泛使用 Handler<T> 接口,其中 handler(T result) 方法将与结果一起执行。

  • Vert.x 3 也支持 Rx Observable。这将允许您 return 一个 Observable<T>,一旦 async task 完成,它将把结果发送到 subscribers

  • 此外,总是有一个选项 return Future<T>,一旦异步任务完成,它就会包含结果。虽然Vert.x并没有真正用到这个。

因此您可能会发现 blockingnon-blocking api 很难有这样的 common interfaceVertxrun blocking code 提供了简单易行的方法,但我认为这对您的情况来说不是一个好的解决方案。

就我个人而言,我会看看 RxJava. There is support for Rx on Android, and has been well adopted in Vertx 3 - with almost every API call having a Rx equivalent

移动自:

Config retrieveConfig(String authCreds);

Observable<Config> retrieveConfig(String authCreds);

将使您能够拥有一个通用界面,并使其在 AndroidVert.x 上工作。它还将提供额外的好处,即不必误入 Rx 试图避免的回调地狱。

希望这对您有所帮助,