Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

251
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda