Vert.x 3.8.1+ 中 CompositeFuture 的 Promise 等价物是什么?

Dan*_*ner 4 future promise vert.x

我有一个 Vert.x 3.7.1 方法,它部署了一堆 Verticle,如果所有部署都成功,则通过事件总线发送一条消息来执行一些启动工作。该方法的结构如下所示:

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");
   }
});
}
Run Code Online (Sandbox Code Playgroud)

我想Promise在 Vert.x 3.8.1+中用s复制同样的功能,因为Future.future()现在大部分相关方法都被弃用了。问题是,没有CompositePromise或任何看起来与Futures相似的东西。如何执行一系列部署,然后当且仅当所有部署都成功时,使用PromiseVert.x 3.8.1+ 中的新类执行其他操作?

tse*_*ont 6

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);
    }
  });
}
Run Code Online (Sandbox Code Playgroud)