まあ、これはリアクティブプログラミングとは直感に反しているように聞こえますが、null /例外を処理する方法を理解することはできません。
private static class Data {
public Mono<String> first() {
return Mono.just("first");
}
public Mono<String> second() {
return Mono.just("second");
}
public Mono<String> empty() {
return Mono.empty();
}
}
基本的に、パブリッシャーがイベントを公開しない限り、サブスクライバーは行動しないことを理解しています。したがって、このようなコードは機能します。
Data data = new Data();
data.first()
.subscribe(string -> Assertions.assertThat(string).isEqualTo("first"));
そして、最初の呼び出しが空を返した場合、私はこれを行うことができます。
Data data = new Data();
data.empty()
.switchIfEmpty(data.second())
.subscribe(string -> Assertions.assertThat(string).isEqualTo("second"));
しかし、両方の呼び出しが空を返す場合をどのように処理しますか(通常、これはユーザーに伝播する必要がある例外シナリオです)。
Data data = new Data();
data.empty()
.switchIfEmpty(data.empty())
.handle((string, sink) -> Objects.requireNonNull(string))
.block();
上記の例では、イベントが公開されていないため、ハンドルは呼び出されません。
JB Nizetが指摘したように、。を使用すると1秒switchIfEmpty
でチェーンできますMono.error
。
または、で問題がない場合はNoSuchElementException
、チェーンでつなぐことができますsingle()
。それはちょうど1つの要素の強力な契約を強制し、そうでなければその標準的な例外を伝播します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加