Jedes dient einem anderen Zweck, so dass es schwierig ist, sie zu vergleichen.
Im Allgemeinen, wenn Sie diese Quelle nehmen:
let source = Observable.range(1,3);
und verbrauchen sie mit subscribe()
unmittelbar gefolgt von unsubscribe()
:
source.subscribe(
val => console.log(val),
undefined,
() => console.log('complete')
).unsubscribe();
Dann werden alle Werte aus der Quelle, obwohl ich zu emittierenden gehen direkt nach dem Abonnieren aufgerufen. Dies liegt daran, dass der Code immer noch streng sequenziell ist und die source
ist eine kalte Observable.
1
2
3
complete
Btw, versuchen .delay(0)
Operator Hinzufügen source.delay(0).subscribe(...).unsubscribe()
und sehen zu machen, was passiert. Dies bewirkt, dass Werte für die Rückrufe der Teilnehmer asynchron unter Verwendung eines tatsächlichen setTimout()
Aufrufs gesendet werden, und aus diesem Grund wird unsubscribe()
aufgerufen, bevor es die Rückrufe erreicht, und wird sofort verworfen, da wir uns bereits abgemeldet haben.
Mit anderen Worten: unsubscribe()
können Sie jederzeit Werte empfangen. Auch wenn die Quelle nicht alle Werte ausgegeben hat (wir erhalten nie einen vollständigen Aufruf).
Der Operator take()
beschränkt die Kette so, dass nur eine bestimmte Anzahl von Werten ausgegeben wird.
source.take(1).subscribe(
val => console.log(val),
undefined,
() => console.log('complete')
);
Dieser sendet nur einen einzigen Wert und ergänzt:
1
complete
Auch wenn Sie .unsubscribe()
hinzugefügt das Ergebnis wäre das gleiche.
Siehe Live-Demo: https://jsbin.com/copujo/4/edit?js,console
So take()
ist ein Operator Verkettungs Observable während unsubscribe()
ein Verfahren auf Subscription
Objekt ist. Diese zwei Dinge sind oft austauschbar, aber ich denke, sie ersetzen sich nie vollständig.
'var subscription = observable.subscribe ({Funktion A}). Unsubscribe();' funktioniert nicht wie erwartet incase funcation A wird aufgerufen, nachdem javascrit diese Zeile beendet hat. Anstatt nur einen Wert zu erhalten, erhalten Sie null Werte. Es wird empfohlen, sich manuell anzumelden und take (..) oder andere Methoden zu verwenden, wie zum Beispiel das Abonnement für Sie. –