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

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

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 Denunciar

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 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