vertx学習のFuture

2968 ワード

一、同時に組み合わせて実行する.CompositeFuture.allは複数のfutureパラメータ(最大6個)を受け入れる.すべてのfutureが成功すると、成功したfutureが返されます.そうしないと、失敗が1つあれば失敗したfutureが返されます.

			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の使用
クリックしてリンクを開く