Verkettung Observablen in RxJS
Ich Lerne RxJS und Eckig 2. Sagen wir, ich habe ein Versprechen Kette mit mehreren asynchronen Funktionsaufrufen, mit denen abhängen, die auf dem vorhergehenden Ergebnis, das wie folgt aussieht:
var promiseChain = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
}, 1000);
}).then((result) => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + 2);
}, 1000);
});
}).then((result) => {
console.log(result);
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(result + 3);
}, 1000);
});
});
promiseChain.then((finalResult) => {
console.log(finalResult);
});
Meine versuche, das gleiche zu tun, der allein mit RxJS ohne Einsatz verspricht, produziert die folgenden:
var observableChain = Observable.create((observer) => {
setTimeout(() => {
observer.next(1);
observer.complete();
}, 1000);
}).flatMap((result) => {
console.log(result);
return Observable.create((observer) => {
setTimeout(() => {
observer.next(result + 2);
observer.complete()
}, 1000);
});
}).flatMap((result) => {
console.log(result);
return Observable.create((observer) => {
setTimeout(() => {
observer.next(result + 3);
observer.complete()
}, 1000);
});
});
observableChain.subscribe((finalResult) => {
console.log(finalResult);
});
Es ergibt die gleiche Ausgabe wie das Versprechen Kette. Meine Fragen sind
- Mache ich das richtig? Gibt es irgendwelche RxJS bezogene Verbesserungen, die ich machen kann, um die oben genannten code
- Wie bekomme ich diese beobachtbaren Kette wiederholt auszuführen? d.h. das Hinzufügen weiterer Abonnements am Ende nur produziert eine zusätzliche 6 obwohl ich erwarte, dass es zu drucken 1, 3 und 6.
observableChain.abonnieren((finalResult) => {
console.log(finalResult);
});observableChain.abonnieren((finalResult) => {
console.log(finalResult);
});1
3
6
6
Ein Beispiel für die Verkettung verspricht mit rxjs6 hier: stackoverflow.com/a/55991374/1882064
InformationsquelleAutor Harindaka | 2016-06-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Über Versprechen Komposition vs. Rxjs, da dies eine Häufig gestellte Frage, finden Sie einige der zuvor gestellten Fragen auf, SO unter anderem :
Grundsätzlich
flatMap
ist das äquivalent vonPromise.then
.Ihre zweite Frage, die Sie wiedergeben möchten Werte schon abgegeben, oder möchten Sie weitere Werte, wie Sie ankommen? Im ersten Fall, überprüfen Sie die
publishReplay
Betreiber. Im zweiten Fall, die standard-Abonnement ist genug. Jedoch könnten Sie brauchen, um bewusst sein, von der Kälte. vs. hot Dichotomie je nach Quelle (vgl. Heiß und Kalt observablen : gibt es 'heiße' und 'kalte' Operatoren? für eine illustrierte Erläuterung des Konzepts)InformationsquelleAutor user3743222