Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

305
Views
RxJS: debounceTime devuelve todos los valores

¿Es posible ejecutar la secuencia con retraso, si no se producen otros eventos, y devolver todos los valores a la vez?

Necesito algún tipo de función debounceTime , pero eso devolverá todos los valores.

about 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Si entiendo correctamente, necesita un operador que almacene eventos en búfer hasta que no ocurra ningún evento durante un cierto período de tiempo, luego repite todos los eventos almacenados en búfer. Yo intentaría esto:

Establezca este nuevo operador en el prototipo Observable:

 function bufferedDebounceTime(time) { return Observable.create(subscriber => { let buffer = []; return this.do(x => buffer.push(x)) .debounceTime(time) .flatMap(() => buffer) .do(() => buffer = []) .subscribe( value => subscriber.next(value), err => subscriber.error(err), () => subscriber.complete() ); }); } Observable.prototype.bufferedDebounceTime = bufferedDebounceTime;

Luego utilízalo como un operador:

 yourSourceObservable.bufferedDebounceTime(1000).subscribe(...)
about 4 years ago · Santiago Trujillo Report

0

EDITAR

bufferTime hecho actúa como un intervalo para siempre, por lo que no se recomienda. Como comentó Jørgen Tvedt, debounceTime + buffer es lo que está buscando.

Sin embargo, porque este es un operador muy útil. Creé mi personalizado que hace que todo sea mucho más fácil, lo llamé bufferDebounce

Lo hice como una función de operador en TypeScript para forzar la inferencia de tipos a lo largo de la canalización:

 type BufferDebounce = <T>(debounce: number) => OperatorFunction<T, T[]>; const bufferDebounce: BufferDebounce = debounce => source => new Observable(observer => source.pipe(buffer(source.pipe(debounceTime(debounce)))).subscribe({ next(x) { observer.next(x); }, error(err) { observer.error(err); }, complete() { observer.complete(); }, }) );

Puede probarlo usted mismo en este ejemplo de trabajo https://stackblitz.com/edit/rxjs6-buffer-debounce

RESPUESTA ANTERIOR

Con RXJS 6+ puedes hacer esto muy fácilmente.

Como mencionó ZahiC, la respuesta es con buffers, pero específicamente puedes hacer todo eso con bufferTime Cómo usar bufferTime

Entonces, donde sea que esté su source (como observable), puede:

 // This will capture all responses, and return it in an Array every 2 secs const example = source.pipe(bufferTime(2000));
about 4 years ago · Santiago Trujillo Report

0

buffer y debunceTime se pueden usar juntos para lograr este objetivo. Mira este artículo:

https://dev.to/datadeer/debounced-aggregated-buffered-actions-with-rxjs-6-3koa

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!