project reactor中的Mono.from操作符

Posted by hcy on August 19, 2022

project reactor中的Mono.from操作符

​ reactor项目中经常会用到Mono.from操作符,主要包含下面四个,他们的返回值如下

  • Mono.fromFuture(); –> MonoCompletionStage
  • Mono.fromCallable(); –>MonoCallable
  • Mono.fromRunnable(); –>MonoRunnable
  • Mono.fromSupplier(); –>MonoSupplier

​ 这几个类的逻辑非常相似,他们有一个共同特点,就是如果supplier返回null时,不会向下游传递,而是直接complete。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
	public void subscribe(CoreSubscriber<? super T> actual) {
		Operators.MonoSubscriber<T, T>
				sds = new Operators.MonoSubscriber<>(actual);

		actual.onSubscribe(sds);

		if (sds.isCancelled()) {
			return;
		}

		try {
            //获取真实值,如果值为null则直接完成,否则将值传递给下游后完成
			T t = supplier.get();
			if (t == null) {
				sds.onComplete();
			}
			else {
				sds.complete(t);
			}
		}
		catch (Throwable e) {
			actual.onError(Operators.onOperatorError(e, actual.currentContext()));
		}
	}

​ 这个特点很有用,特别是搭配Flux嵌套Mono时,可以不用考虑null值的情况。因为Flux是不允许null值的


转载请注明出处:https://www.huangchaoyu.com/2022/08/19/project-reactor中的Mono.from操作符/