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

122
Vistas
La combinación de rxjs y setTimeout crea un comportamiento de tiempo de ejecución inesperado

Tengo algunos problemas para entender la diferencia entre los siguientes dos fragmentos.

 const a = Observable.create( o => { setTimeout( ()=>{ console.log("now 3"); o.next(3); setTimeout(()=>{ console.log("and now 5"); o.next(5)}, 1500);} , 1500); } ); const a2 = Observable.create( o => { setTimeout( ()=>{ console.log("here is 4"); o.next(4); setTimeout(o.next(6), 1500);} , 1500); } );

https://stackblitz.com/edit/rxjs-byqgnh?devtoolsheight=60

Eliminé en el segundo bloque solo el registro de la consola.

El primer bloque funciona como se esperaba: el primer número se emite después del tiempo de espera, el segundo número también.

El segundo bloque emite ambos números simultáneamente. ¿Alguien puede explicar la diferencia?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Cuando tu lo hagas

 setTimeout(()=>{ console.log("and now 5"); o.next(5)}, 1500);

estás pasando ()=>{ console.log("and now 5"); o.next(5)} como una función de devolución de llamada a la API setTimeout , que probablemente se activará después de 1.5sec . Y está bien ya que esto es lo que querías que sucediera.

pero cuando lo haces

 setTimeout(o.next(6), 1500)

Está ejecutando o.next(6) y emitiendo valor justo antes de pasarlo como una función de devolución de llamada a setTimeout , pero cuando ve que no es una firma de función, lo que o.next(6) es un valor undefined que será pase como una devolución de llamada y las posibilidades de que obtenga la Callback must be a function .

Por lo tanto, si desea que se o.next(6) como una función de devolución de llamada para establecer el tiempo de espera y emitir un valor después de 1,5 segundos, puede pasarlo como

 setTimeout(() => o.next(6), 1500)

o como

 setTimeout(function(){ o.next(6); }, 1500)
about 4 years ago · Juan Pablo Isaza Denunciar

0

setTimeout toma una devolución de llamada

Lo siguiente genera un error de tiempo de ejecución

 setTimeout(o.next(6), 1500);

TypeError [ERR_INVALID_CALLBACK]: Callback must be a function.

ya que el tipo de devolución de n.next no está definido. Sin embargo, los observables detectan errores y los emiten como eventos de error para usted. Entonces no ves eso en tu ejemplo.

Para arreglar esto, podría darle a setTimeout una función de devolución de llamada en su lugar.

 setTimeout(() => o.next(6), 1500);
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