Bei der Verwendung der asynchronen Pipe für eine Observable, die den Operator .share () verwendet (aufgrund der teuren Berechnungen im Backend), stolperte ich über dieses Verhalten:
%Vor%Vorlage:
%Vor%Die Ausgabe des Anfangswerts lautet:
%Vor%Die folgenden Ausgaben (nach mehr als 2 Sekunden) sind:
%Vor%Welches Verhalten würde ich auch für den ersten Wert erwarten? Wenn ich die .share () weglassen, ist die Ausgabe für den ersten Wert "wahr wahr", wie ich erwarten würde. Ich vermute, dass das obige Verhalten auf die Tatsache zurückzuführen ist, dass der erste Ausdruck in der Vorlage eine beobachtbare Ausführung auslöst, und sobald die zweite asynchrone Pipe die Observable abonniert, sind die Daten bereits verschwunden. Ist diese Erklärung richtig? Und wie kann ich dieses Verhalten vermeiden?
Laut der Referenz ,
Die asynchrone Pipe abonniert ein Observable oder Promise und gibt den zuletzt ausgegebenen Wert zurück.
In RxJS 4 wird shareReplay
verwendet, um das gewünschte Verhalten zu erreichen.
In RxJS 5 ist ein direktes Gegenstück zu shareReplay
publishReplay
gefolgt von refCount
() Siehe die Erklärung und die Diskussion ).
Es sollte also
sein %Vor%