2017-03-31 5 views
0

Ich versuche, meinen Kopf um reaktive Programmierung und Observablen zu wickeln.RxJS. Erstellen einer Observable aus 2 Eigenschaften

Was ist der reaktive Weg, um das folgende Szenario zu lösen?

Ich habe ein Objekt mit 2 Eigenschaften.

Zu jeder Zeit kann eine, beide oder keine dieser Eigenschaften eingestellt werden.

Jede dieser Eigenschaften unterscheidet Ereignisse, die ich hören kann.

Nur wenn beide Eigenschaften festgelegt sind, möchte ich ihre Update-Ereignisse abhören und eine Art Aggregation für ihre Eigenschaften ausführen.

+0

Ich denke, ein Codebeispiel der genannten Eigenschaften und Ereignisse sollte zu der Frage hinzugefügt werden, um die Anzahl der Annahmen zu reduzieren, die bei der Beantwortung getroffen werden müssten. – cartant

Antwort

0

Eine mögliche Lösung besteht darin, aus jeder Eigenschaft einen Stream zu erstellen und dann die Datenströme unter Verwendung von combineLatest zu kombinieren.

combineLatest wird keinen Wert erzeugen, bis beide Eingänge einen Wert erzeugt haben. Nachdem beide Eingaben einen Wert ergeben haben, wird der Stream jedes Mal aktualisiert, wenn sich der Wert ändert. Siehe Code unten:

const property1$ = Rx.Observable.fromEvent(button1, 'click'); 
const property2$ = Rx.Observable.fromEvent(button2, 'click'); 

const aggregateWhenBothAreClicked$ = property1$ 
    .combineLatest(property2$) 
    .map([property1,property2])=>doStuff(property1,property2)) 

Die doStuff Funktion wird nicht aufgerufen werden, bis beide Tasten haben geklickt wurde. Nachdem beide Tasten angeklickt wurden, wird die Funktion doStuff jedes Mal danach aufgerufen.

Verwandte Themen