方法:使用compose与Future
- //回调方法1
- private Future<boolean> getStatus1(String id) {
- return Future.future(f -> {
- f.complete(true);
- });
- }
- //回调方法2
- private Future<boolean> getStatus2(boolean id) {
- return Future.future(f -> {
- f.complete(false);
- });
- }
-
- Future.<Void>succeededFuture()
- .compose(v1 -> {
- getStatus1("1")
- })
- .compose(v2 -> {
- //现在这个v2 就代表getStatus1方法的返回值
- getStatus1(v2)
- }).onComplete(a -> {
- //现在这个a 值为 false
- if (a.succeeded()) {
- //end
- }else{
- //end
- }
- })
- //回调方法1
- private Future<boolean> getStatus1(String id) {
- return Future.future(f -> {
- f.complete(true);
- });
- }
- //回调方法2
- private Future<boolean> getStatus2(boolean id) {
- return Future.future(f -> {
- f.complete(false);
- });
- }
-
- List<Future> futures = new ArrayList<Future>(2);
- futures.add(getStatus1("1"));
- futures.add(getStatus1(true));
- //join代表异步并发执行
- //all代表按顺序执行,先执行
- CompositeFuture.join(futures).onComplete(ar -> {
- if(ar.succeeded()) {
- CompositeFuture res = ar.result();
- boolean b1 = res.resultAt(0);//true
- boolean b2 = res.resultAt(1);//false
- }else{
- //error
- }
- });
- vertx.executeBlocking(f -> {
- f.complete(res);
- });
- public void start(Promise<Void> startFuture) {
- vertx.setPeriodic(3600 * 500, keys -> {
- //半小时更新一次
- getSetKeys();
- });
- }
- private static AsyncMap<Object, Object> timeline = null;
-
- //初始化
- vertx.sharedData().getAsyncMap("Timeline", resultHandler ->{
- timeline = resultHandler.result();
- });
-
- //使用
- timeline.get(id, resultHandler -> {
- JsonObject vinfo = (JsonObject) resultHandler.result();
- });