RxJS - Zähler mit Reset statuslos machen?

7

Angenommen, ich habe das folgende Markup:

%Vor%

Und das folgende Rx.js-Skript:

%Vor%

Alles funktioniert wie erwartet. Durch Klicken auf das +/- wird der Zähler inkrementiert / dekrementiert, und durch Klicken auf "RESET" wird er auf Null zurückgesetzt, aber ... Ich habe die Variable "total" ganz oben. Das ist ein Zustand, der, wenn ich die Werte der funktionalen reaktiven Programmierung abonniere, böse ist, nein? Wenn ja, wie behebe ich das? Wenn ich den Reset-Button nicht hätte, könnte ich einfach scan(seed, accumulator) verwenden, aber die Funktionalität des Reset-Buttons wirft mich auf eine Schleife, wie man es "zustandslos" macht.

Geige hier arbeiten .

    
Jrop 15.07.2015, 15:25
quelle

3 Antworten

14

Es gibt zwei Möglichkeiten, dies zu tun, die ich sehen kann.

Erstens gibt es nichts, was besagt, dass Sie Ihre Daten in der Pipeline nicht erweitern können:

%Vor%

Damit können Sie Downstream signalisieren, dass der Stream zurückgesetzt wurde, indem Sie ein Feld hinzufügen (Hinweis: Ich habe geschummelt, aus Gründen der Lesbarkeit können Sie reset : false hinzufügen, anstatt sich auf Falschheit zu verlassen, aber es liegt an Ihnen) .

Alternativ können Sie, wenn Sie an reset denken, den Stream tatsächlich zurücksetzen, stattdessen flatMapLatest verwenden, um das Inkrementieren und Dekrementieren zu umbrechen:

%Vor%

Das macht den Stream ein bisschen unordentlicher als es sein muss mit der Aufnahme von zwei .startWith s, um die entsprechenden Sequenzen zu starten, aber wenn Sie gegen eine Erweiterung waren und den implizit vom Stream kontrollierten Zustand wollten, dann dies wäre ein Ansatz.

    
paulpdaniels 15.07.2015, 16:02
quelle
7

Folgen Sie @paulpdaniels Antwort, hier ist, was ich mit Ramda verwende:

%Vor%     
Arnaud Dezandee 20.08.2015 13:58
quelle
0

@Jrop Ich mag diesen Operator Rx.Observable.when . Mit diesem können Sie sehr einfach Bacon.update reproduzieren. Dies ist mein Code und jsbin Beispiel:

%Vor%

Es wird auch besser sein, wenn Sie sich dieses Join-calculus ansehen, New Release and Joins und dies Combining sequences

    
xgrommx 16.07.2015 10:42
quelle

Tags und Links