我有一个接口,其中有一个返回"config“对象的方法。
我想在安卓和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异步代码吗?
发布于 2015-07-17 09:27:28
在Async programming中,您不能真正地将您的值返回给调用方,因为这将是一个阻塞调用--这是async programming试图删除的主要内容之一。这就是为什么在Vertx中,许多方法返回this或void。
有各种不同的范例可供选择:
Vert.x广泛使用了Handler<T>接口,其中handler(T result)方法将与结果一起执行。Vert.x 3也支持Rx Observable。这将允许您返回一个Observable<T>,它将在subscribers完成后将结果发送给subscribers。Future<T>的选项,一旦异步任务完成,该选项将包含结果。尽管Vert.x并没有很好地使用这一点。因此,对于blocking和non-blocking api,您可能会发现很难拥有这样的blocking。Vertx为运行阻塞代码提供了很好且简单的方法,但我不认为这是一个很好的解决方案。
就我个人而言,我想看看RxJava。有对Android上的Rx的支持,并且在Vertx 3中得到了很好的采用--几乎每个API调用都有一个Rx当量。
移自:
Config retrieveConfig(String authCreds);至
Observable<Config> retrieveConfig(String authCreds);将使您能够拥有一个公共接口,并使它能够在Android和Vert.x上工作。它还将带来额外的好处,即不必走入Rx试图避免的回调地狱。
希望这能帮上忙
https://stackoverflow.com/questions/31465131
复制相似问题