Обработчик Vert.x Future / Promise не вызывается в Groovy - PullRequest
0 голосов
/ 01 октября 2019

Я получил довольно маленький Verticle, который должен подключаться к базе данных, регулярно опрашивать таблицу и отправлять объекты на шину событий. Пока что я могу подключиться к базе данных, но впоследствии обработчик не выполняется, и мой таймер опроса не запускается. Я думаю, это что-то очевидное, и я ценю любую помощь.

Я использую Vert.x 3.8 Обещания , поскольку фьючерсы устарели (как в примере за этой ссылкой). Как вы можете видеть из моего кода, использование устаревших 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
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...