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

163
Vistas
Los bucles en RxJS Observable no se detienen después de llamar completo o error

Al llamar a observer.complete() u observer.error() , un observador deja de enviar datos y se considera que ha terminado. Sin embargo, si hay un ciclo for en el observador, el ciclo continuará ejecutándose incluso después de que se llame a observer.complete() . ¿Alguien me puede explicar este comportamiento? Espero que el ciclo se acorte. El comportamiento actual significa que un intervalo o un ciclo while se ejecutará para siempre en un Observable a menos que cancele la suscripción en el código.

En el siguiente fragmento, agregué un console.log para ver si se llamará al registro después de observer.complete() .

 const testObservable = new Observable( observer => { for (let count = 0; count < 11; count++){ observer.next(count); if (count > 5) { observer.complete() console.log("test") } if (count > 7) { observer.error(Error("This is an error")) } }} ); let firstObservable = testObservable.subscribe( next => {console.log(next)}, error => { alert(error.message)}, () => {console.log("complete")} )
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Es una responsabilidad de la función de creación destruir adecuadamente los recursos. En su caso, podría haber simplemente una declaración de return después de observer.complete() .

Pero, en general, si es necesario, la función de creación debe devolver la función de desmontaje (TeardownLogic), que se llama cuando se finaliza el observable.

 new Observable( observer => { // observable logic, eg ajax request return () => { // teardown function, eg cancel ajax request }; });

Observable simplemente ignore las llamadas futuras de next(...) , complete() y error(...) una vez que finalice el observable. Significa que la función complete() o error(...) se llamó internamente o el observable se canceló externamente.

 new Observable( observer => { observer.next('a'); observer.complete(); // next calls will be ignored observer.next('b'); });
 const observable = new Observable( observer => { setTimeout( () => observer.next('a'), // this will be ignored due to unsubscribe 10 ); }); const subscription = observable.subscribe(...); subscription.unsubscribe();
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