Как использовать vertx в java для вызова API 4 раза, а затем продолжить - PullRequest
0 голосов
/ 05 августа 2020
vertx.setPeriodic(1000, id -> {
    //api call
    if (count == 4){
        vertx.cancelTime(id); 
    }
});

Теперь проблема в том, что мне не нужно исправлять время 1000 мс, я просто хочу вызвать api 4 раза, а затем go с окончательным ответом api для дальнейшей обработки, пожалуйста, помогите.

1 Ответ

1 голос
/ 06 августа 2020

Один из способов - использовать рекурсивный подход.

Поэтому вы можете реализовать что-то вроде этого как удобную точку входа

private Future<YourResultType> callApiNTimes(final int repetitions) {
    final Promise<YourResultType> p = Promise.promise();

    recursiveApiCalls(p, 0, repetitions);

    return p.future();
}

Рекурсия реализована следующим образом:

private void recursiveApiCalls(final Promise<YourResultType> p, final int counter, final int maxRepetitions) {
    yourRawApiCall().onComplete(reply -> {
        if (reply.failed()) {
            p.fail(reply.cause());
            return;
        }

        if (counter < maxRepetitions) {
            recursiveApiCalls(p, counter + 1, maxRepetitions);
            return;
        }

        p.complete(reply.result());
    });
}

В конце реализовать yourRawApiCall, а затем использовать его вот так

callApiNTimes(4).onComplete(reply -> {
    if (reply.failed()) {
        // Something went wrong, do your error handling..
        return;
    }

    final YourResultType result = reply.result();

    // Do something with your result..
});

Подход Antoher заключался бы в том, чтобы поместить ваши вызовы API как Futures в список и выполнить этот список параллельно с CompositeFuture.all , CompositeFuture.join , .. вместо одного за другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...