Vorwort
Der Kern von RXJs ist das beobachtbare Objekt, das eine Kombination aus asynchroner und Ereignisprogrammierung unter Verwendung beobachtbarer Datensequenzen ist.
Das asynchrone Programmiermodell, das diesem sehr ähnlich ist, ist vielversprechend. Promise ist ein asynchrones Modell, das auf Zustandsänderungen basiert. Sobald der Wartezustand in einen erfolgreichen oder gescheiterten Zustand eintritt, kann er nicht erneut geändert werden. Wenn sich der Staat ändert, kann der Abonnent nur einen Wert erhalten. Obwohl beobachtbar ein asynchrones Programmiermodell ist, das auf Sequenzen basiert. Wenn sich die Sequenz ändert, kann der Abonnent kontinuierlich neue Werte erhalten. Darüber hinaus bietet Promise nur einen Rückrufmechanismus und verfügt nicht über mehr Operationen, um die komplexe Verarbeitung von Ergebnissen zu unterstützen. Observable bietet eine Vielzahl von Operatoren, um den Betriebsergebnissen zu verarbeiten, um die komplexe Anwendungslogik zu erfüllen.
In der tatsächlichen Programmierung befassen wir uns hauptsächlich mit drei Objekten: Beobachtbar , Beobachter , Abonnement :
Nehmen Sie das Klickereignis eines Elements als Beispiel, um zu sehen, wie man Observable verwendet:
var clickstream = new rx.observable (observer => {var handle = evt => observer.next (evt); element.adDeventListener ('klick', Handle); return () => Element.RemoveVentListener ('Click', Handle);}); evt.id);}, err => {console.error ('onError');}, () => {console.log ('onComplete');}); setTimeout (() => {subscription.unsubScribing ();}, 1000); Wäre es nicht zu problematisch, wenn jedes Ereignis so eingewickelt werden muss? Daher bietet RXJS uns eine bequeme Funktion: Observable.fromEvent , um die Verbindung von Ereignissen zu erleichtern.
Gemeinsame Linkoperatoren: CONAT, MUGEL, Combinelate usw.
Projektionsvorgänge: Karte, Flatmap, FlatMap müssen eingeführt werden
Filter: Filter, Unterscheidungskundgebliebene,
Bedienerklassifizierung: Bediener nach Kategorien
Fehlerbehandlung: Fangen, wiederholen, endlich
Dekompression: Entlieben, Gas, Probe, penstierbar
Reduzierung: Puffer, BufferwithCount, BufferwithTime
Um die Operatoren von Observable zu beherrschen, müssen Sie zuerst lernen, das Sequenzdiagramm zu verstehen:
Pfeile repräsentieren Sequenzen, die sich im Laufe der Zeit ändern. Klicken Sie beispielsweise kontinuierlich auf die Maus auf ein Element, und der Kreis repräsentiert den Einfluss der Sequenz von außen. Beispielsweise wird jedes Klick des Elements einen Ereignisrückruf auslösen, und die Zahlen im Kreis sind Informationen von außen. Beispielsweise hat jede Ereignisauslöser ein Ereignisobjekt, das einige Informationen zu diesem Vorgang darstellt.
Um die komplexe Logik flexibel zu verwenden, müssen Sie lernen, die von ihnen bereitgestellten Bediener zu verwenden. Ich unterteilte die Operatoren in zwei Kategorien: Ein-Sequenz-Operation und Verbundsequenzbetrieb. Der Single-Sequenz-Betrieb bezieht sich auf Betriebsvorgänge, die auf einer Sequenz durchgeführt wurden. Der Verbindungssequenzbetrieb bezieht sich auf Operatoren, die zwei oder mehr Sequenzen verarbeiten. Die Verbindungssequenzoperation ist relativ schwer zu verstehen.
Schauen wir uns zunächst Single-Sequenz-Operationen an und nehmen Sie Kartenvorgänge als Beispiel:
Mit dem Kartenbetrieb können die Informationen jedes Mal in einer Sequenz nach außen übertragen werden. Wie in der obigen Abbildung gezeigt, multipliziert der Übertragungswert jeder Zeit um zehn. Wenn sich der Abonnent dann abonniert, ist der Abonnementwert, der jedes Mal erhalten wird, nicht mehr das ursprüngliche 123, sondern die konvertierten 10 20 30. Durch Sequenzdiagramme können Sie die Operationen von Observable leichter verstehen.
Nehmen wir als Beispiel zusammengeführt
Der Zweck der Zusammenführungsoperation besteht darin, zwei unabhängige Sequenzen in eine Sequenz zu synthetisieren. Ursprünglich überträgt Sequenz 1 im Laufe der Zeit A bei 100 ms, B bei 200 ms und C bei 300 ms, der Abonnent erhält drei Werte von ABC bei 400 ms. Sequenz 2 überträgt D bei 150 ms, e bei 250 ms und F bei 350 ms, und sein Abonnent erhält drei Werte von DEF innerhalb von 400 ms. Die neue Sequenz nach dem Zusammenschluss empfängt ABCDEF innerhalb von 400 ms (beachten Sie die Reihenfolge).
Verständnis der gemeinsamen Operatoren:
Observable.Range: Überträgt eine bestimmte Anzahl wertvoller Sequenzen.
Beobachtbar.TOARAY: Umwandle alle emittierten Werte in ein Array, wenn die Sequenz abgeschlossen ist.
Observable.FlatMap: Umgewandelt Elemente im ursprünglichen Sequenzstrom in einen neuen Sequenzstrom und fügt diesen neuen Sequenzstrom an den Ort der Elemente in der ursprünglichen Sequenz zusammen.
Beobachtbar.StartWith: Es legt den ersten Wert der beobachtbaren Sequenz fest
Observable.comBinelatest: Ähnlich wie bei Versprechung wird es erst ausgeführt, nachdem alle Sequenzen Ergebnisse erzielt haben.
Beobachtbar.scan: Die in der Sequenz emittierten Werte können aggregiert werden. Ähnlich wie bei der Reduzierung werden die Werte der gesamten Sequenz aggregiert und einen Endwert senden, wenn die Sequenz abgeschlossen ist.
Beobachtbar.Sample: Holen Sie sich eine bestimmte Probe aus einer kontinuierlichen Sequenz
Beobachtbar.Merge: Mehrere Sequenzen in eine verschmelzen und kann als oder verwendet werden
Observable.Timestamp: Kann die Übertragungszeit jedes Übertragungswerts erhalten
Observable.Distinctuntilchanged (Compare, Selector): Selector nimmt den für den Vergleich verwendeten Schlüssel heraus und vergleicht ihn mit dem Vergleich von zwei Schlüssel
Beobachtbar.Was thewhe () stoppt die Übertragung von Daten, wenn der Parameter falsch ist
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels für das Studium oder die Arbeit eines jeden hilfreich sein wird. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen.