distinctuntilchanged debouncetime debounce javascript rxjs debouncing

javascript - debouncetime - ¿Qué hace RxJS.Observable debounce?



rxjs debouncetime (3)

¿Alguien puede explicar en inglés simple qué hace la función de rebote de RxJS Observavle ?

Imagino que emite un evento de vez en cuando dependiendo de los parámetros, pero mi código a continuación no funciona como esperaba.

var x$ = Rx.Observable.fromEvent(window, ''click'') .map(function(e) {return {x:e.x, y:e.y};}) .debounce(1000) .subscribe(function(el) { console.log(el); });

y la versión de JsBin .

Esperaba que este código imprimiera un clic una vez por segundo, sin importar qué tan rápido esté haciendo clic. En su lugar, imprime el clic en lo que creo que son intervalos aleatorios.


La rebota emitirá un valor después de que haya transcurrido un intervalo de tiempo especificado sin que se emita otro valor.

Usando diagramas simples, lo siguiente puede proporcionar una mayor ayuda:

Stream 1 | ---1-------2-3-4-5---------6---- after debounce, the emitted stream looks like as follows: Stream 2 | ------1-------------5---------6-

Los elementos intermedios (en este caso, 2,3,4) se ignoran.

A continuación se ilustra un ejemplo:

var Rx = require(''rx-node''); var source = Rx.fromStream(process.stdin).debounce(500); var subscription = source.subscribe( function (x) { console.log(''Next: %s'', x); } );

Utilicé un nodo para ilustrar esto ... asumiendo que usted tiene un nodo instalado, puede ejecutarlo escribiendo

$node myfile.js (where the aforementioned code is in myfile.js)

Una vez que se inicia este programa de nodos, puede escribir valores en la consola: si escribe rápidamente, los elementos se ignorarán, y si el tipo es intermitente, rápido y lento aparecerán después de un espacio en la escritura (en el ejemplo anterior tengo 500 ms) en la consola ("Próximo: ")

También hay material de referencia excelente en https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/debounce.md


.debounce() produce el último valor recibido si no se recibieron valores dentro del intervalo especificado.

Esto significa que tan pronto como haga clic en un segundo, no se producirá nada.

Si desea acelerar la emisión de valores no más frecuentes que cada segundo, debe usar .sample(1000) lugar.


Larga historia corta : el rebote espera durante X tiempo que la transmisión no emite ningún valor nuevo, luego deje pasar el último valor.

Historia larga : una vez que se emite un valor, el rebote detendrá su emisión durante X tiempo para ver si se emite otro valor, de hecho, bloqueará la transmisión durante este tiempo. Si se emite un nuevo valor durante el tiempo de rebote, el temporizador se reinicia y el rebote espera de nuevo todo el tiempo. Si su temporizador caduca sin que se emita ningún valor nuevo, deja pasar el último valor.

Digamos que desea agregar autocompletar a un cuadro de entrada. Si el usuario inserta "a" es posible que desee mostrarle las opciones "bellota, alaska", pero si el usuario inmediatamente después de presionar "l", solo propondrá "alaska". En este caso, es mejor esperar a que el usuario deje de presionar los teclados para evitar realizar trabajos innecesarios. Debounce es la herramienta correcta aquí: espera X tiempo cuando la transmisión no emite ningún valor nuevo