首页  

vertx future高级组合操作     所属分类 vertx 浏览量 277
import dyyx.util.CommUtil;
import io.vertx.core.Future;
import io.vertx.core.Promise;
import io.vertx.core.Vertx;

import java.time.LocalDateTime;

public class PromiseDemo {
    static Promise< String> promise = Promise.promise();
    static Vertx vertx = Vertx.vertx();

    public static void main(String[]args)throws Exception {

        Task task = new Task();
        // 启动线程  sleep 1s 后 ,设置 promise 返回值 ,成功或失败
        task.start();
        System.out.println(LocalDateTime.now());

        promise.future()
                //  promise 失败时调用 recover 操作,将错误替换为另一个值 ,相当于 catch 
                .recover(err -> Future.succeededFuture("recover from error"))
                .map(String::toUpperCase)
                .flatMap(str -> {
                    Promise< String> next = Promise.promise();
                    vertx.setTimer(2000, id -> next.complete("### " + str));
                    return next.future();
                })
                .onSuccess(System.out::println);

        System.out.println(LocalDateTime.now());

        // ### RECOVER FROM ERROR
        // ### 2024-01-22T08:08:18.118
    }

    private static class Task extends Thread{

        public void run(){
            // sleep 1 s
            CommUtil.doSleep(1000);
            // 设置返回结果
            promise.complete(LocalDateTime.now().toString());
            // 设置异常
            // promise.fail(new Throwable("error"));
        }

    }
}

上一篇     下一篇
CompletableFuture 例子

CompletionStage 说明

vertx future compose CompositeFuture

vertx future 与 CompletionStage 互操作

vertx webclient 使用

vertx core http 客户端 例子