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

155
Views
¿Cómo puedo combinar 2 observables que devuelvan un evento de resultado exitoso si uno de ellos falló?

Quiero suscribirme a dos métodos observables, pero uno puede recibir un error y el segundo puede tener éxito. Pero cuando trato de hacerlo, solo obtengo un evento de error si uno de ellos devuelve el éxito

cuando estoy usando combineLatest solo obtengo un error incluso si el primero es exitoso

 combineLatest( this.createTable1(), this.createTable2() ).pipe(untilDestroyed(this)) .subscribe(() => { alert('suceess'); }, (error) => { alert('error'); });

cuando me gusta lo siguiente, solo funciona si falla el segundo, si falla el primero, no recibí una alerta de éxito:

 this.createTable1().pipe(untilDestroyed(this)).subscribe( () => { alert('1suceess'); this.createTable2().pipe(untilDestroyed(this)).subscribe( () => { alert('2suceess'); }, () => { alert('error'); }); }, () => { alert('error'); });

¿Cómo puedo arreglarlo?

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

0

Creo que su problema es que RxJS completa la transmisión una vez que se detecta un error antes de obtener el valor del otro, por lo que debe manejar los errores en cada transmisión y volver a convertirlos en observables.

 combineLatest( this.createTable1().pipe(catchError(() => of('Errored'))), this.createTable2().pipe(catchError(() => of('Errored'))) ).pipe(untilDestroyed(this)) .subscribe(() => { alert('suceess'); }, (error) => { alert('error'); });

Esto debería funcionar. Yo mismo no sabía esto, lo probé en este StackBlitz: https://stackblitz.com/edit/rxjs-xzdtpn?devtoolsheight=60&file=index.ts

Verá si comenta la línea 9, nunca llegaremos a conocer el observable posterior.

EDITAR: estoy agregando una versión diferente en caso de que no le importe saber si uno de los observables falló:

 merge( this.createTable1().pipe(catchError(() => EMPTY)), this.createTable2().pipe(catchError(() => EMPTY)) ).pipe(untilDestroyed(this)) .subscribe(() => { alert('suceess'); }, (error) => { alert('error'); });
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!