Unterschied zwischen .abonnement zu .take (1)

9

Ich frage mich, ob es einen Leistungsunterschied zwischen der Verwendung von .take(1) und .unsubscribe gibt, wenn unsubscribe direkt nach dem Abonnement verwendet wird:

%Vor%

Erstens:

%Vor%

Zweitens:

%Vor%

Irgendwelche Ideen davon machen die Performance anders?

    
TheUnreal 12.11.2016, 12:59
quelle

1 Antwort

27

Jedes dient einem anderen Zweck, so dass es schwierig ist, sie zu vergleichen.

Im Allgemeinen, wenn Sie diese Quelle verwenden:

%Vor%

und konsumiere es mit subscribe() , unmittelbar gefolgt von unsubscribe() :

%Vor%

Dann werden alle Werte von der Quelle ausgegeben, obwohl ich nach dem Abonnieren unsubscribe() aufgerufen habe. Dies liegt daran, dass der Code immer noch streng sequenziell ist und die source ist eine kalte Observable.

%Vor%

Übrigens, versuchen Sie% .delay(0) -Operator hinzuzufügen, um source.delay(0).subscribe(...).unsubscribe() zu machen und sehen Sie, was passiert. Dadurch werden Werte an die Callbacks der Teilnehmer asynchron über einen tatsächlichen setTimout() -Aufruf gesendet und aus diesem Grund wird unsubscribe() aufgerufen, bevor es die Callbacks erreicht, und wird sofort verworfen, da wir uns bereits abgemeldet haben.

Mit anderen Worten: unsubscribe() , lasst uns jederzeit aufhören, Werte zu empfangen. Selbst wenn die Quelle nicht alle Werte gesendet hat (wir erhalten nie einen vollständigen Aufruf).

Der Operator take() begrenzt die Kette so, dass nur eine bestimmte Anzahl von Werten ausgegeben wird.

%Vor%

Dies gibt nur einen einzelnen Wert aus und schließt ab:

%Vor%

Auch wenn Sie .unsubscribe() hinzugefügt haben, wäre das Ergebnis dasselbe.

Siehe Live-Demo: Ссылка

So take() verkettet Observables, während unsubscribe() eine Methode auf % co_de ist % Objekt. Diese zwei Dinge sind oft austauschbar, aber ich denke, sie ersetzen sich nie vollständig.

    
martin 12.11.2016, 15:24
quelle

Tags und Links