--- title: Reactorで返り値がMonoの処理の後、引数をそのまま返すときのショートカット tags: ["Reactor", "Java"] categories: ["Programming", "Java", "reactor", "core"] date: 2017-11-23T07:08:52Z updated: 2017-11-23T07:10:32Z --- メモ こういうインターフェースがあるとする。 ``` java public interface FooService { Mono save(Foo foo); } ``` 次のような処理を書きたくなることがちょくちょく出てくる。 ``` java Mono foo = request.bodyToMono(Foo.class); Mono saved = foo.flatMap(fooService::save).then(foo); ``` `Mono`が返り値な処理が終わってから、その引数をそのまま返したいみたいなとき、 わざわざ`then`で戻すのがダサい。 もっと言うと`then`のときに`foo`が再度`subscribe`されてしまうため、正確には次のように書くほうが良い。 ``` java Mono foo = request.bodyToMono(Foo.class).cache(); Mono saved = foo.flatMap(fooService::save).then(foo); ``` イマイチなので、次のように書くとCool。 ``` java Mono foo = request.bodyToMono(Foo.class); Mono saved = foo.delayUntil(fooService::save); ```