メモ
こういうインターフェースがあるとする。
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);