Что такое Promise-эквивалент CompositeFuture в Vert.x 3.8.1+? - PullRequest
1 голос
/ 04 октября 2019

У меня есть метод Vert.x 3.7.1, который развертывает несколько вершин и, если все развертывания завершаются успешно, отправляет сообщение через шину событий, которая выполняет некоторую работу при запуске. Структура метода выглядит следующим образом:

void deploy() {
   Future<Void> v1Future = Future.future();
   Future<Void> v2Future = Future.future();
   // ...

vertx.deployVerticle(new SomeVerticle(), result -> {
   if (result.succeeded()) {
     v1Future.complete();
   } else {
     v1Future.fail(result.cause());
    }
});

// ...

List<Future<Void>> allFutures = ImmutableList.of(v1Future, v2Future);
CompositeFuture.all(allFutures).setHandler(result -> {
   if (result.succeeded()) {
     vertx.eventBus().send("some-address");
   }
});
}

Я хочу повторить эту же функциональность с Promise s в Vert.x 3.8.1+, поскольку Future.future() и большинство связанных методовсейчас устарела. Проблема в том, что нет CompositePromise или чего-то похожего на Future s. Как я могу выполнить серию развертываний, а затем, если и только если все развертывания будут успешными, сделать что-то еще, используя новый класс Promise в Vert.x 3.8.1 +?

1 Ответ

1 голос
/ 07 октября 2019

CompositeFuture все еще существует и не будет заменен. Причина состоит в том, что необходимо составить асинхронные результаты , а не обещания.

Вот как вы можете составить фьючерсы, соответствующие каждому обещанию:

void deploy() {
  Promise<Void> v1Promise = Promise.promise();
  Promise<Void> v2Promise = Promise.promise();
  // ...

  vertx.deployVerticle(new SomeVerticle(), result -> {
    if (result.succeeded()) {
      v1Promise.complete();
    } else {
      v1Promise.fail(result.cause());
    }
  });

  // ...

  List<Future> allFutures = ImmutableList.of(v1Promise.future(), v2Promise.future());
  CompositeFuture.all(allFutures).setHandler(result -> {
    if (result.succeeded()) {
      vertx.eventBus().send("some-address", message);
    }
  });
}
...