J'ai une fonction de carte qui définit comme suit: Mono<OUT> map(IN in)
Voici un exemple concret:
public Mono<Integer> map(String s) {
return Mono.fromCallable(() -> {
try {
Thread.sleep(1_000); // simulate HTTP request
return 1;
} catch (Exception e) {}
return -1; // need to return something.
});
}
Le problème est que dans le cas d'une erreur (c. -à IOException
), nous avons encore besoin de retourner une sortie. Il y a aussi une possibilité qu'il y ait pas d' être une réponse (mais pas d' erreur)
Une solution pourrait être un , Optional::empty
mais je pense qu'il est lourd. De préférence, je voudrais revenir Mono::empty
si une erreur est survenue.
La raison en est, Mono::empty
se consommé par l'abonné sans traitement ultérieur. Voici un exemple:
Flux.just(
Mono.just("123"),
Mono.empty(),
Mono.just("456")
).flatMap(s -> s)
.subscribe(System.out::println);
La sortie serait:
123
456
Comment obtenir le même comportement?
Ce qui devrait map
ressembler?
EDIT:
Rethinking, peut - être que je ferais mieux de revenir hors certains conteneurs (comme Optional
) ou un personnalisé ( Result
) qui peut être vide.
Si je comprends bien, voici ce que vous avez besoin:
return Mono.fromCallable(() -> {
Thread.sleep(1_000); // simulate HTTP request
return 1;
}).onErrorResume(_ -> Mono.empty())