Wie verwende ich das Rückgabeobjekt von Mono ohne block ()?


Kshitij Dhakal:

Ich versuche, Spring Webflux zu lernen. In ReactiveMongoRepositoryversuche ich zu überprüfen, ob die Kategorie bereits vorhanden ist. Wenn es bereits vorhanden ist, geben Sie das Objekt zurück, andernfalls speichern Sie es und geben Sie das neue gespeicherte Objekt zurück. So etwas wie folgen.

public Mono<Category> save(Category category) {
    final Mono<Category> byId = repository.findById(category.getId());
    final Category block = byId.block();
    if (block == null) {
        return repository.save(new Category(category.getName()));
    } else {
        return byId;
    }
}

Wie kann ich das ohne verwenden block()?

Nikolaus:

Verwendung Mono::switchIfEmpty, die eine Alternative bietet, Monofalls die erstere ohne Daten abgeschlossen wird. Solange ReactiveMongoRepository::savezurückgegeben wird Mono, können Sie es übergeben, um die alternative zu generieren.

return repository.findById(category.getId())
                 .switchIfEmpty(repository.save(new Category(category.getName())));

Falls ReactiveMongoRepository::findByIda Monomit Daten zurückgegeben wird, Mono::switchIfEmptywird das nicht aufgerufen.

Bearbeiten: Wenn Sie Mono::defermit a verwenden, Supplier<Mono>wird der Speichervorgang bei Bedarf verzögert:

.switchIfEmpty(Mono.defer(() -> repository.save(new Category(category.getName()))));

Verwandte Artikel


Wie konvertiere ich Mono <Recipe> in Recipe ohne Block?

Nikhil Mollay: Ich bin neu in Webflux und es fällt mir schwer, das Mono ohne Block in mein Rezept umzuwandeln. Ich habe versucht, Flatmap zu verwenden und zu abonnieren, aber ich konnte es nicht zum Laufen bringen. @Override public Mono<Void> deleteById(St

Wie verwende ich das Warten von Selen?

John Pham Ich habe Probleme herauszufinden, wie ich die Wartefunktion von Selenium verwenden kann. Ich versuche zu überprüfen, ob ein Element vorhanden ist, und wenn dies der Fall ist, wird eine Anweisung gedruckt. Hier ist mein Code: from selenium import webd

Wie verwende ich das DNS von minikube?

Sache Wie verwende ich das DNS von Minikube (Cluster)? Ich möchte alle IP-Adressen erhalten, die allen Pods für den ausgewählten kopflosen Dienst zugeordnet sind. Ich möchte es nicht außerhalb des Clusters verfügbar machen. Ich erstelle gerade eine Back-End-Eb

Wie verwende ich das IF für die Auswahl von Zellen?

Fah Ich habe einen Pivot und möchte 6 Zellen von der letzten Zeile aufwärts zählen, aber irgendwann im Pivot gibt es weniger als 6 Zellen mit einem Wert. Wie kann ich in diesem Fall verwenden, wenn die Auswahl der Zellen weniger als 6 Zellen mit Wert beträgt?