📝 BLOG.IK.AM

@making's memo
(🗃 Categories 🏷 Tags)

Reactorで返り値がMono<Void>の処理の後、引数をそのまま返すときのショートカット

🗃 {Programming/Java/reactor/core}

🏷 Reactor 🏷 Java

🗓 Updated at 2017-11-23T07:10:32Z by Toshiaki Maki  🗓 Created at 2017-11-23T07:08:52Z by Toshiaki Maki  {✒️️ Edit  ⏰ History}


🚨 Warning: This content is old. Please don't trust too much.

メモ

こういうインターフェースがあるとする。

public interface FooService {
  Mono<Void> save(Foo foo);
}

次のような処理を書きたくなることがちょくちょく出てくる。

Mono<Foo> foo = request.bodyToMono(Foo.class);
Mono<Foo> saved = foo.flatMap(fooService::save).then(foo);

Mono<Void>が返り値な処理が終わってから、その引数をそのまま返したいみたいなとき、
わざわざthenで戻すのがダサい。
もっと言うとthenのときにfooが再度subscribeされてしまうため、正確には次のように書くほうが良い。

Mono<Foo> foo = request.bodyToMono(Foo.class).cache();
Mono<Foo> saved = foo.flatMap(fooService::save).then(foo);

イマイチなので、次のように書くとCool。

Mono<Foo> foo = request.bodyToMono(Foo.class);
Mono<Foo> saved = foo.delayUntil(fooService::save);