vertx学習のFuture
2968 ワード
一、同時に組み合わせて実行する.CompositeFuture.allは複数のfutureパラメータ(最大6個)を受け入れる.すべてのfutureが成功すると、成功したfutureが返されます.そうしないと、失敗が1つあれば失敗したfutureが返されます.
二、順序を組み合わせて実行する.composeは、チェーンを使用してコンビネーションfutureを設定することができる(したがって、この方法はシーケンスコンビネーションと呼ばれる).
この例では、この3つの操作はチェーン式です.
fut1 fut2 startFuture
この3つのステップが成功すると、最終的なfuture(startFuture)は成功します.しかしながら、いずれかのステップが失敗した場合、最終的なfutureも失敗する.
https://blog.csdn.net/u011054333/article/details/76595444//vertx中httpの説明、webclientの使用
クリックしてリンクを開く
Future fut1 = Future.future();
Future fut2 = Future.future();
Future fut3 = Future.future();
Future fut4 = Future.future();
Future fut5 = Future.future();
Future fut6 = Future.future();
// ,
vertx.executeBlocking(fut -> {
//
fut1.complete(new JsonObject());
fut.complete();
}, false, null);
vertx.executeBlocking(fut -> {
//
fut2.complete(new JsonObject());
fut.complete();
}, false, null);
vertx.executeBlocking(fut -> {
//
fut3.complete(new JsonObject());
fut.complete();
}, false, null);
vertx.executeBlocking(fut -> {
//
fut4.complete(new JsonObject());
fut.complete();
}, false, null);
vertx.executeBlocking(fut -> {
//
fut5.complete(new JsonObject());
fut.complete();
}, false, null);
vertx.executeBlocking(fut -> {
//
fut6.complete(new JsonObject());
fut.complete();
}, false, null);
// ,
CompositeFuture.all(fut1,fut2,fut3,fut4,fut5,fut6).setHandler(ar -> {
if (ar.succeeded()) {
JsonObject r0 = ar.result().resultAt(0);
JsonObject r1 = ar.result().resultAt(1);
JsonObject r2 = ar.result().resultAt(2);
JsonObject r3 = ar.result().resultAt(3);
JsonObject r4 = ar.result().resultAt(4);
JsonObject r5 = ar.result().resultAt(5);
future.complete(r0.mergeIn(r1.mergeIn(r2.mergeIn(r3.mergeIn(r4.mergeIn(r5))))));
}else{
future.complete(new JsonObject());
}
});
二、順序を組み合わせて実行する.composeは、チェーンを使用してコンビネーションfutureを設定することができる(したがって、この方法はシーケンスコンビネーションと呼ばれる).
この例では、この3つの操作はチェーン式です.
fut1 fut2 startFuture
この3つのステップが成功すると、最終的なfuture(startFuture)は成功します.しかしながら、いずれかのステップが失敗した場合、最終的なfutureも失敗する.
FileSystem fs = vertx.fileSystem();
Future startFuture = Future.future();
Future {
// What the file is created (fut1), execute this:
Future fut2 = Future.future();
fs.writeFile("/foo", Buffer.buffer(), fut2.complter());
return fut2;
}).compose(v -> {
// When the file is written (fut2), execute this:
fs.remove("/foo", "/bar", startFuture.completer());
},
// mark startFuture it as failed if any step fails.
startFuture);
https://blog.csdn.net/u011054333/article/details/76595444//vertx中httpの説明、webclientの使用
クリックしてリンクを開く