2017-09-01 1 views
3

Ich habe viele rx Beispiele über publish() und replay() gelesen. In allen Tutorials heißt es, dass es wichtig ist, publish() vor dem Aufruf von replay() aufzurufen. Warum ist das so? Was passiert, wenn Sie replay() aufrufen und nie publish() aufrufen? Es scheint, als würde der replay() - Operator die beobachtbare Quelle abonnieren und mit dem Caching beginnen. Dann würde jeder, der mitkommt, den gleichen, vollständigen Datenstrom bekommen. Der einzige Grund, warum ich publish() sehen kann, ist, dass das Abonnement für die beobachtbare Quelle verzögert wird, bis connect() aufgerufen wird. Ist das richtig?Warum ist es wichtig, publish() vor der Wiedergabe() zu rufen

+0

Können Sie Links zu den "vielen RX-Beispielen" veröffentlichen? – Enigmativity

+0

Heres, aber es ist auch im Buch im Lesen http://reactivex.io/documentation/operators/replay.html –

+0

Die Aussage "Wenn Sie den Replay-Operator auf ein Observable anwenden, bevor Sie es in ein verbindbares Observable konvertieren, das Ergebnis verbindungsfähiges Observable wird immer die gleiche vollständige Sequenz an alle zukünftigen Beobachter senden, selbst diejenigen Beobachter, die nach dem verknüpfbaren Observable abonnieren, haben damit begonnen, Nachrichten an andere abonnierte Beobachter auszugeben. " ist einfach nur verwirrend für mich. Es macht einfach keinen Sinn für mich. – Enigmativity

Antwort

3

Sie gelten in der Regel eine oder das andere, aber nicht beides zugleich, weil publish().replay() keinen praktischen Unterschied zu einem normalen replay() hat und replay().publish() ist nur ein Rezept für eine späte Verbraucher die gesamte Sequenz nicht zu sehen.

In allen Tutorials sagen sie, dass es wichtig ist, publish() vor dem Aufruf von replay() aufzurufen.

Das ist definitiv falsch, wo hast du es genau gelesen?

Ist das richtig?

Beide Operatoren geben ein ConnectableObservable und Sie haben connect in beiden Fällen rufen die Sequenzen zu starten. In beiden Fällen sollten Sie die Verbraucher vor dem Verbindungsaufbau vorbereiten oder autoConnect(n) verwenden, um die Sequenz nach n Verbrauchern zu starten.

Der Unterschied zwischen publish und replay, dass der letztere einige oder alle Elemente zwischenspeichert und sie an die Verbraucher wiedergibt, egal, wann sie sich anmelden. Ersteres speichert keine Artikel, nicht einmal den neuesten wie BehaviorSubject, und versendet den Artikel an die Verbraucher, die ihn genau zu diesem Zeitpunkt abonniert haben.

+0

Ich schätze all Ihre Hilfe bisher. Ich bin immer noch auf den Unterschied zwischen 'Replay()' und 'Replay(). Publish()' fest. Was ist der Unterschied zwischen den beiden Rezepten? –

+0

Replay wird Elemente zwischenspeichern und dann 'publish' wird Teile davon an seine Konsumenten ausgeben, da es den Cache verbraucht und die Fähigkeit des' replay() 'rückgängig macht, dieselben Elemente für alle wiederzugeben, auch wenn sie anfangen zu konsumieren. Ich kann mir nicht vorstellen, dass Sie 'replay(). Publish()' zusammen benutzen. – akarnokd

Verwandte Themen