新一代WebFlux框架核心技术Reactor响应式编程基本用法( 二 )

新一代WebFlux框架核心技术Reactor响应式编程基本用法
文章插图
图片
Mono.fromFuture(CompletableFuture<? extends Integer> future)方法:创建一个Mono对象,该对象包含通过调用给定CompletableFuture对象
Mono.fromFuture(CompletableFuture.supplyAsync(() -> 666)).subscribe(System.out::println) ;

新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
  • 异常处理
下面这个示例完整的展示了当发生异常后的处理
public static Mono<Users> invoke(Mono<Users> user) {return user.flatMap(u -> {if ("admin".equals(u.getName())) {return Mono.error(new RuntimeException("越权")) ;}u.setName(u.getName() + " - ");return Mono.just(u) ;});}public static void mAIn(String[] args) {invoke(Mono.just(new Users("admin"))).doOnNext(System.out::println).doOnError(e -> {System.out.println(e.getMessage()) ;})// .onErrorResume(e -> Mono.just(new Users(e.getMessage() + " - fallback"))) // 功能更强,可以对捕获的异常进行响应的处理,然后再返回一个值.onErrorReturn(new Users("return")) // 捕获异常,简单粗暴直接返回一个静态值.doOnNext(System.out::println).subscribe(); }
  • 执行结果
越权Users [name=return]
  • 错误操作符

新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
  • 错误返回操作符

新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
  • 连接操作符
将该Mono的发射与提供的发布者连接(不交错) 。
Mono.just(10).concatWith(Mono.just(20)).subscribe(System.out::println) ;
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
图片
  • then操作符
该操作符是在当前Mono执行完成后切换到另外一个Mono 。
Mono.just(10).doOnNext(System.out::println).then(Mono.just(666)) // 切换到另外一个Mono通道, 忽略之前的Mono元素.doOnNext(System.out::println).subscribe();
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
Flux常用操作
  • 创建元素
just():直接使用元素创建Flux,即在创建Flux时拿到数据,之后有谁订阅它 , 就重新发送数据给订阅者 。
Flux.just(1, 2, 3...)
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
图片
fromArray()、fromIterable()和fromStream():可以从数组、Iterable对象或Stream对象中创建Flux对象 。
Flux.fromArray(new String[]{"1","2","3"});Flux.fromIterable(List.of("a","b","c"));Flux.fromStream(List.of("a","b","c").stream());fromArray
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
fromIterable
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
fromStream
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
empty():创建一个不包含任何元素 , 只发布结束消息的序列 。
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
range(int start, int count):创建包含从start起始的count个数量的Integer对象的序列 。
Flux.range(1, 10) ;
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
图片
  • 错误处理
Flux.error(new RuntimeException("错误")).onErrorResume(ex -> Mono.just("发生异常:" + ex.getMessage())).subscribe(System.out::println) ;error操作符
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图
onErrorResume操作符
新一代WebFlux框架核心技术Reactor响应式编程基本用法

文章插图