始终执行mono switchiffempty()

zf9nrax1  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(652)

我想这样做:

  1. if (someObject == null) {
  2. return Mono.just(someId)
  3. .flatMap(si -> service.monoVoidMethod(si));
  4. }
  5. return Mono.just(someObject)
  6. .flatMap(so -> service.monoObjectMethod(so)
  7. .flatMap(so2 -> service.monoVoidMethod2(so2)))

有没有什么方法可以用更“被动”的方式来做,而不使用if语句?我试过使用mono.switchiffempty,但是当someobject不为null时,monovoidmethod和monovoidmethod2都被调用了。

  1. return Mono.justOrEmpty(someObject)
  2. .flatMap(so -> service.monoObjectMethod(so)
  3. .flatMap(so2 -> service.monoVoidMethod2(so2)))
  4. .switchIfEmpty(Mono.empty().flatMap(var -> service.monoVoidMethod(si)))

我发现了一个孪生主题:mono switchiffempty()总是被调用
还尝试了mono.defer,但没有改变:

  1. return Mono.justOrEmpty(someObject)
  2. .flatMap(so -> service.monoObjectMethod(so)
  3. .flatMap(so2 -> service.monoVoidMethod2(so2)))
  4. .switchIfEmpty(Mono.defer(() -> service.monoVoidMethod(si)))

当monoviodmethod2和monoviodmethod1不是void类型时,一切都很好——但这不是我的情况。在我的系统中,monovoidmethod2和monovoidmethod1返回http状态,正文为空。

yqyhoc1h

yqyhoc1h1#

你的例子没有错误。干得好

  1. public void test(Integer integer) {
  2. Mono.justOrEmpty(integer)
  3. .flatMap(so -> Mono.just(1)
  4. .flatMap(so2 -> Mono.just(3)))
  5. .switchIfEmpty(Mono.just(10))
  6. .subscribe(System.out::println);
  7. }

如果你执行 test(1) 然后它会打印3。另一种方式,执行 test(null) 返回一个 10 - switchIfEmpty 价值观。
---更新日期:2021年1月30日
我在考试中变了。 flatMap 因为so2返回一个空单声道。所以,两次调用 test(1) 以及 test(null) 返回10

  1. public void test(Integer integer) {
  2. Mono.justOrEmpty(integer)
  3. .flatMap(so -> Mono.just(1)
  4. .flatMap(so2 -> Mono.empty()))
  5. .switchIfEmpty(Mono.just(10))
  6. .subscribe(System.out::println);
  7. }
展开查看全部

相关问题