我有一个非常小的 Verticle,它应该连接到数据库并定期轮询表并将对象发送到事件总线。到目前为止,我可以连接到数据库,但是之后的处理程序没有被执行,我的轮询计时器也没有启动。我想这是显而易见的,感谢每一个帮助。
我使用 Vert.x 3.8 Promises ,因为 Future 已被弃用(就像在该链接后面的示例中一样)。正如您在我的代码中看到的,使用不推荐使用的 Futures工作得很好!但是谁想要使用已弃用的代码,呵呵?要么我做错了什么,要么这是 Vert.x 中的错误,我不认为。
我的 Vert.x 是 3.8.1
class JdbcVerticle extends AbstractVerticle {
private SQLConnection connection
@Override
void start(Promise<Void> startPromise) {
def jdbcParams = config().getJsonObject('connection')
// This gets executed:
testFuture().handler = { println "Test Future handler runs!" }
// This is never executed :-(
connect(jdbcParams).handler = { println "Connected..." }
}
Future<Void> connect(JsonObject jdbcParams) {
def promise = Promise.<Void>promise()
def client = JDBCClient.createShared(vertx, jdbcParams)
client.getConnection() { connection ->
if(connection.failed()) {
promise.fail(connection.cause())
} else {
this.connection = connection.result()
promise.complete()
}
}
return promise.future()
}
Future<Void> testFuture() {
def future = Future.<Void>future()
vertx.setTimer(200) { future.complete() }
return future
}
}