Vert.x 3.8.1+ 中与 CompositeFuture 等效的 Promise 是什么?
What's the Promise equivalent of CompositeFuture in Vert.x 3.8.1+?
我有一个 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");
}
});
}
我想在 Vert.x 3.8.1+ 中使用 Promise
复制相同的功能,因为 Future.future()
和大多数相关方法现在已弃用。问题是,没有 CompositePromise
或任何看起来类似于 Future
的东西。如何执行一系列部署,然后当且仅当所有部署都成功时,使用 Vert.x 3.8.1+ 中的新 Promise
class 做其他事情?
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);
}
});
}
我有一个 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");
}
});
}
我想在 Vert.x 3.8.1+ 中使用 Promise
复制相同的功能,因为 Future.future()
和大多数相关方法现在已弃用。问题是,没有 CompositePromise
或任何看起来类似于 Future
的东西。如何执行一系列部署,然后当且仅当所有部署都成功时,使用 Vert.x 3.8.1+ 中的新 Promise
class 做其他事情?
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);
}
});
}