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

245
Views
¿Cómo hacer `cancelar suscripción` cuando recibí un error en la canalización de rxjs?

¿Cómo cancelar la unsubscribe cuando recibí un error en la canalización?

Me suscribo a la tubería subjectPipe fuera de la función doWork .

Dentro de la función doWork arrojo un error (puede ser como parte de mi flujo lógico).

Todo funciona como se esperaba, pero subjectPipe es log: "in subject error" y debido a que usé take(1) pensé que debería cancelar la suscripción, pero no sucede porque no se invoca la función completa.

¿Cómo cancelar la unsubscribe cuando ocurre un error?

Lo único que se me ocurre es crear la variable error$ y usar takeUntil y luego la función de error para invocar error$ . pero no quiero hacerlo porque es una variable adicional y el código será complicado si lo hago para cada caso que tengo.

stackblitz.com

 import { Subject, throwError } from 'rxjs'; import { map, switchMap, take, tap } from 'rxjs/operators'; console.clear(); const doWork = () => { const subject = new Subject(); const work = () => { throw new Error('bla'); }; const subjectPipe = subject.pipe( tap(() => { console.log('in subject pipeline'); }), switchMap(() => work()) ); subjectPipe.subscribe({ next: () => console.log('in subjectPipe next'), error: () => console.log('in subjectPipe error'), complete: () => console.log('in subjectPipe complete'), }); return { subject, subjectPipe }; }; const { subject, subjectPipe } = doWork(); subjectPipe .pipe( take(1), tap(() => console.log('continue the pipe...')) ) .subscribe({ next: () => console.log('in subject next'), error: () => console.log('in subject error'), complete: () => console.log('in subject complete'), }); subject.next(null);
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

El error significa finalización (sin embargo, la devolución de llamada asociada con complete nunca se llama). Por lo tanto, no es necesario darse de unsubscribe de la transmisión manualmente aquí.

En su caso, si necesita llamar a alguna lógica tanto en finalización como en error, puede usar el operador de finalización RxJS, que se llamará en ambos casos.

 subjectPipe .pipe( take(1), tap(() => console.log('continue the pipe...')), finalize(() => console.log( 'You can do the final stuff here, instead of `complete` callback' ) ) ) .subscribe({ next: () => console.log('in subject next'), error: () => console.log('in subject error'), complete: () => console.log('in subject complete'), });
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!