Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

249
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda