RxJs: Wie eine Schleife basierend auf dem Status des beobachtbaren?
Ich versuche RxJs, um eine Schleife über einen Beobachtbaren in meinem stream, bis es in einem bestimmten Zustand, dann den stream weiter. Speziell ich die Umwandlung einer synchronen do/while-Schleife RxJs, aber ich nehme an, die gleiche Antwort könnte verwendet werden, für die eine for-oder while-Schleife sowie.
Dachte ich, könnte ich doWhile() für diese, aber es scheint, wie die condition-Funktion nicht haben Zugriff auf das Element in den stream, das scheint die Niederlage der Zweck für mich.
Ich bin mir nicht ganz sicher, was die richtige reaktive Terminologie ist für das, was ich will, aber hier ist ein Beispiel dessen, was ich werde für:
var source = new Rx.Observable.of({val: 0, counter: 3});
source.map(o => {
o.counter--;
console.log('Counter: ' + o.counter);
if (!o.counter) {
o.val = "YESS!";
}
return o;
})
.doWhile(o => {
return o.counter > 0;
})
.subscribe(
function (x) {
console.log('Next: ' + x.val);
},
function (err) {
console.log('Error: ' + err);
},
function () {
console.log('Completed');
});
Die erwartete Ausgabe wäre:
Counter: 3
Counter: 2
Counter: 1
Counter: 0
Next: YESS!
Completed
Vorausgesetzt, dies ist ein lösbares problem, ich bin unklar, wie Sie mark das "start" - von wo Sie wollen zurück, wenn Sie die Schleife.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es die erweitern Betreiber, die Sie schließen, indem Sie rekursiv aufrufen eine Selektor-Funktion. Rückgabe eines leeren beobachtbar wäre dein Durchbruch in diesem Fall. Sehen jsbin:
value.counter
ist eine starke Vereinfachung, in Wirklichkeit die exit-Zustand wird bestimmt durch einen anderen asynchronen stream.Nicht genau, was Sie wollen, aber in der Nähe, mit
expand
Betreiber, und signalisieren das Ende der Rekursion mitRx.Observable.empty
(http://jsfiddle.net/naaycu71/3/):Ausgabe :