In dieser vorliegenden Form können Sie nicht. Ihr Observable ist von einer Quelle abgeleitet, die nicht vollständig ist, so dass sie nicht selbst abgeschlossen werden kann. Was Sie tun können, ist diese Quelle mit einer vollständigen Bedingung zu erweitern. Dies würde funktionieren wie:
var end$ = new Rx.Subject();
var observable = Rx.Observable
.fromEvent(document.getElementById('emitter'), 'click')
.takeUntil(end$);
Wenn Sie wollen observable
beenden, tun Sie end$.onNext("anything you want here");
. Das ist der Fall, wenn das Ende-Ereignis von Ihnen generiert wird. Wenn dies eine andere Quelle ist, die dieses Ereignis erzeugt (Tastendruck usw.), können Sie direkt eine Observable, die von dieser Quelle abgeleitet ist, als Argument von takeUntil
ablegen.
Dokumentation:
Dies scheint potenzielle Gefahr von Speicherverlusten in Browser-App zu sein. Es scheint, dass unendlich viele Beobachter mit HTML-Elementen verbunden sein können, die bereits aus dem Bereich entfernt wurden. Es kann verhindern, dass GC diese Elemente und viele andere Referenzen aus dem Speicher entfernt ... – ulfryk
?? Ich folge dir nicht. Was ist das'? In jedem Fall wird der onCompleted-Handler für alle Beobachter ausgelöst, was Sie gefragt haben. Bei Speicherlecks wird der Ereignisbeobachter, der erstellt wurde, entfernt, wenn sich der letzte Beobachter von der Observable, die von "fromEvent" erstellt wurde, abgemeldet hat. – user3743222
"was löst onComplete-Ereignis für alle abonnierten Beobachter aus" ist zweiter zusätzlicher Teil meiner Frage. Was ich erreichen muss, ist das Entfernen des Ereignishörers.Vollständiger Abschluss von Observable, damit ich alle veralteten Referenzen entfernen kann, wenn ich nicht mehr auf ein Ereignis horche. – ulfryk