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

378
Visualizações
subscriber.next() no se activa después de la declaración subscriber.error

Según los datos de entrada, quiero decidir si son datos válidos o no y enviar el observable hasta el final.

He intentado crear un subscribe.next() observable y secuencial que funciona correctamente, pero aparece cualquier error y luego no funciona ninguna declaración.

 const observable = new Observable((subscriber) => { subscriber.next(1); subscriber.next(2); subscriber.error('failed this after second'); subscriber.next(3); subscriber.next(4); subscriber.complete(); }); observable.subscribe({ next(x) { console.log('got value ' + x); }, error(err) { console.error('something wrong occurred: ' + err); }, complete() { console.log('done'); }, });

Salida de corriente:

  • obtuvo el valor 1
  • tiene valor 2
  • ocurrió algo mal: falló esto después del segundo

Rendimiento esperado

  • obtuvo el valor 1
  • tiene valor 2
  • ocurrió algo mal: falló esto después del segundo
  • tiene valor 3
  • tiene valor 4
  • hecho

Aquí está el enlace de stackblitz https://stackblitz.com/edit/zlksm5?devtoolsheight=50&file=index.ts

about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

El contrato observable

OnError:

  • Indica que el Observable ha terminado con una condición de error específica y que no emitirá más elementos.

Énfasis mío.

Si quieres algo que siga funcionando después de que se complete, no quieres un observable.

Hacia una solución

Simplemente emita su error como un valor. Podría (por ejemplo) envolver sus emisiones en objetos de notificación RxJS para que pueda materialize o dematerialize observables y mantener una API de emisiones consistente.

Por ejemplo:

 const observable = new Observable(subscriber => { subscriber.next({ kind: "N", value: 1 }); subscriber.next({ kind: "N", value: 2 }); subscriber.next({ kind: "E", error: new Error("failed this after second") }); subscriber.next({ kind: "N", value: 3 }); subscriber.next({ kind: "N", value: 4 }); subscriber.next({ kind: "C" }); subscriber.complete(); }); /**** Alternative written more succinctly ****/ const observable = of( { kind: "N", value: 1 }, { kind: "N", value: 2 }, { kind: "E", error: new Error("failed this after second") }, { kind: "N", value: 3 }, { kind: "N", value: 4 }, { kind: "C" } );
 observable.subscribe((notification) => { switch (notification.kind) { case "N": console.log("got value ", notification.value); break; case "E": console.error("something wrong occurred: ", notification.error.message); break; case "C": console.log("done"); } });
about 4 years ago · Juan Pablo Isaza Relatório

0

No creo que sea posible con un Observable, porque el observable se cerrará si ocurriera algún error.

Lo he intentado de dos maneras, poniéndolo como referencia.

 //interval(1000) observable //.pipe(switchMap(() => observable)) .pipe( catchError((d) => { observable.subscribe((nd) => { console.log('--again--', nd); }); return of(d); }) //retry(1) ) .subscribe({ next(x) { console.log('got value ' + x); }, error(err) { console.error('something wrong occurred: ' + err); }, complete() { console.log('done'); }, }); // interval(1000) // .pipe(switchMap(_ => observable)) // .pipe( // catchError((d) => {return of(d)}), // switchMap(_ => observable) // ) // .subscribe(d => { // console.log(d) // })

Para su caso de uso, es mejor usar un tema de comportamiento en su lugar.

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