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

394
Views
RxJS: ¿Cómo retrasar el próximo valor emitido?

Tengo la función asíncrona handleParamsChanges que puede tardar unos segundos en resolverse. Y lo llamo cuando observable emite valor:

 this._activatedRoute.params .subscribe(params => { this.handleParamsChanges(params).then(() => { // new value can be processed now }); });

¿Cómo podría modificar mi código para que si observable emita 2 valores uno tras otro, primero se llame a handleParamsChanges para el primer valor, y solo después de que se resuelva esta promesa, se llame con el segundo valor, y así sucesivamente?

Editar:

Aquí está la solución que se me ocurrió, pero supongo que hay una mejor manera de hacerlo:

 const params$ = this._activatedRoute.params; const canExecute$ = new BehaviorSubject(true); combineLatest(params$, canExecute$) .pipe( filter(([_, canExecute]) => canExecute), map(([params]) => params), distinctUntilChanged() ) .subscribe(async params => { canExecute$.next(false); try { await this.handleParamsChanges(params); } catch (e) { console.log(e); } finally { canExecute$.next(true); } })

Estoy usando canExecute$ para retrasar el procesamiento del nuevo valor.

Necesito usar distinctUntilChanged aquí para evitar crear un bucle infinito.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Lo que estás buscando es concatMap . Espera a que se complete el "observable interno" anterior antes de volver a suscribirse. También puede simplificar enormemente su tubería:

 params$.pipe( concatMap(params => this.handleParamsChanges(params)), ).subscribe()
about 4 years ago · Juan Pablo Isaza 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!