Hier ist ein Spaß RxJava Problem.RxJava - Backpressuring Tastatureingaben?
Ich möchte RxJava Backpressure-Operatoren verwenden, um schnell eine eingegebene Eingabe zu suchen, während jedes Zeichen eingegeben wird, ähnlich wie Google auf seiner Suchseite. Ich ging durch die Backpressure Dokumentation und ich kam mit diesem (ich benutze RxJavaFX/RxKotlinFX, um JavaFX zu nutzen).
val myControl: Node = ...
val burstyMulticast = myControl.events(KeyEvent.KEY_TYPED).publish().refCount()
val burstyDebounced = burstyMulticast.debounce(200, TimeUnit.MILLISECONDS)
val burstyBuffered = burstyMulticast.buffer(burstyDebounced)
burstyBuffered
.flatMap { it.toObservable().map { it.character }.reduce("") { x,y -> x + y } }
.subscribe { println(it) }
Das funktioniert super. Wenn ich "Hello" gegen das Steuerelement eintippe, wird es das String
"Hello" nach 200 ms von keiner Eingabe ausgeben. Aber wenn ich möchte, dass dies wirklich reaktionsschneller ist, sollte ich tatsächlich eine Art rollierender Akkumulation für jede Tasteneingabe haben. Dann sollten meine Konsole Ausgabe wie folgt aussehen wirklich:
H
He
Hel
Hell
Hello
Die sollten meine Emissionen alle, wenn ich das Wort „Hallo“ eingeben, und die 200 ms definiert, wie viel Zeit, bevor die Akkumulation setzt verstreichen soll. Wie mache ich das?
Das fühlt sich näher an der Lösung, aber immer noch eine Verzögerung bekommen, bevor irgendwelche Emissionen passieren ... – tmn
Nizza :) jetzt scheint es Ihnen Lösung gefunden zu haben. !! Wie du geantwortet hast. –
Vielen Dank für Ihre Hilfe. Es hat mich dazu gebracht, zu lernen, und ich beschloss, heute Abend zum ersten Mal gegen den Lerndruck vorzugehen. – tmn