Wie man Observablen zur sequentiellen Ausführung zwingen kann?

9

Ich bewege mich von der Welt der Verheißung in die Welt der Observablen. Eine Sache, die ich normalerweise mit Promise mache, besteht darin, eine Reihe von Aufgaben zu verketten und sie nacheinander ausführen zu lassen. Zum Beispiel habe ich drei Aufgaben: printLog1() , um 1 an die Konsole zu drucken, printLog23() , um 2 und 3 an die Konsole zu drucken, und printLog4() , um 4 zu drucken.

Wenn ich 1-2-3-4 drucken möchte, schreibe ich eine Versprechungskette wie

%Vor%

Jetzt möchte ich die gleiche Funktionalität mit Observable und ich kann die Funktion printLog() in eine Observable wie

umschreiben %Vor%

Dann habe ich drei Observables, die verschiedene Werte an die Konsole senden. Wie verknüpfe ich sie, so dass diese drei Observablen in Reihenfolge laufen und 1-2-3-4 ?

drucken?     
Haoliang Yu 11.04.2017, 04:03
quelle

1 Antwort

12

Wenn Sie sichergehen möchten, dass die Reihenfolge der Emissionen der Reihenfolge entspricht, in der Sie die Quellen-Observablen angegeben haben, können Sie die Operatoren concat oder concatMap verwenden.

Die concat* -Operatoren abonnieren ein Observable erst, nachdem das vorherige Observable abgeschlossen wurde (es funktioniert auch mit Promises, siehe Ссылка ).

In Ihrem Fall würde es wie folgt aussehen:

%Vor%

... oder mit concatMap , wenn die Anfrage für ein Versprechen von der Antwort des vorherigen Versprechens abhängt:

%Vor%

... oder wenn die Reihenfolge keine Rolle spielt, können Sie merge verwenden, die alle Observables / Promises sofort abonniert und ihre Ergebnisse bei ihrem Eintreffen erneut eingibt:

%Vor%     
martin 11.04.2017, 06:20
quelle

Tags und Links