Ich benutze rxjs, um einige komplexe Mausgesten zu handhaben.Wie man eine Sequenz von Observablen in rxjs zusammensetzt
Eine dieser Maßnahmen besteht darin, die Maus während eines Ziehvorgangs mehrmals zu "schütteln" (von links nach rechts, von rechts nach links, ...).
Da ich nicht weiß, ob der Benutzer beginnt, indem er die linke oder rechte bewegt, verwende ich 'race()' zu akzeptieren, was zuerst beginnt.
Mein Problem ist, dass wenn der erste "Schütteln" Beobachter abgeschlossen ist, der zweite bereits abgeschlossen ist.
ich ein vereinfachtes Beispiel hier gemacht habe, auf jsbin (http://jsbin.com/wuzodog/3/edit?html,js,output.)
(I negative Zahlen verwenden als "Maus nach links" und positiven als "Maus rechts" in diesem vereinfachten Beispiel.)
der Kern des Problems ist hier gezeigt ...
const subMouseMove = new Rx.Subject<number>();
const obLeft = subMouseMove.filter(m => m < 0);
const obRight = subMouseMove.filter(m => m >= 0);
const get_obLeftUntilRight =() => obLeft.takeUntil(obRight);
const get_obRightUntilLeft =() => obRight.takeUntil(obLeft);
const get_obShake =() => Rx.Observable.race(get_obLeftUntilRight(), get_obRightUntilLeft());
const obDragShakeAndDrop = Rx.Observable.concat(
get_obShake(),
get_obShake(),
);
//sending the following values to subMouseMove
[-1, -2, 3, 4, -5].forEach((v, i, a) => setTimeout(() => subMouseMove.next(v), i * 10));
Das Problem ist, dass beide Instanzen von get_obShake() ist c ompleted zur gleichen Zeit.
Die Ergebnisse Ich bin von der jsbin bekommen sind:
Ich würde meine Ergebnisse erwarten sein:
Wenn ich das Beispiel (http://jsbin.com/wuzodog/4/edit?html,js,output) ändern, die "shake left/right" und die "shake right/left" direkt aufrufen und dabei "race()" umgehen, bekomme ich die "erwartete" Ausgabe.
Kann jemand erklären, warum der zweite Shake im ersten Beispiel früh fertig ist?
Ich fühle mich wie diese Ihnen helfen zu verstehen, warum: https://github.com/ReactiveX/rxjs/issues/2641 – bryan60
ich ein kleines Bugfix machen würde nicht im Zusammenhang mit der Frage: 'obRight' wahrscheinlich sollte nur nehmen, wenn' m' ist größer als 0, nicht gleich, weil sonst an Ort und Stelle bleibt auch ein Ereignis –