Projet de réacteur: Conception d'une API réactive

seco:

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::emptymais je pense qu'il est lourd. De préférence, je voudrais revenir Mono::emptysi une erreur est survenue.

La raison en est, Mono::emptyse 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 mapressembler?

EDIT:
Rethinking, peut - être que je ferais mieux de revenir hors certains conteneurs (comme Optional) ou un personnalisé ( Result) qui peut être vide.

JB Nizet:

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())

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=233241&siteId=1
conseillé
Classement