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

194
Vistas
Líneas después de setInterval ejecutándose antes de setInterval()

En el fragmento de código a continuación, tengo un setInterval seguido de mi console.log . Como puede ver, endNode se inicializa en null , lo que debe actualizarse dentro setInterval y console.log debe imprimir el nodo actualizado. Al menos, eso es lo que estoy tratando de lograr.

Sin embargo, en mi consola, obtengo null como salida. Parece jugar con un código más que las líneas ( console.log en este caso) se ejecutan antes de que se ejecute setInterval . O tal vez puede ser un problema de alcance.

¿Hay alguna manera de solucionar esto para poder imprimir el valor actualizado de endNode ?

 let endNode = null; let BFStimer = setInterval(function() { if (Q.size() > 0) { let u = Q.dequeue(); if (u.end) { $(".r" + ux + "c" + uy).addClass("explored"); setTimeout(function() { clearInterval(BFStimer); }); endNode = u; return u; } let N = u.neighbor; for (let i = 0; i < N.length; i++) { if (N[i].isWall) { continue; } if (N[i].status === "undiscovered") { N[i].status = "discovered"; $(".r" + N[i].x + "c" + N[i].y).addClass("discovered"); N[i].parent = u; N[i].distance = u.distance + 1; Q.enqueue(N[i]); } } $(".r" + ux + "c" + uy).addClass("explored"); } }, 5); let currentPathNode = endNode; console.log(currentPathNode);
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Este es el comportamiento previsto, no es un error y, por lo tanto, no hay solución. Cuando llama a setInterval , setTimeout , nextTick , etc., no está ejecutando el código de inmediato, pero está programando una tarea que se ejecutará cuando finalice la tarea micro/macro actual.

Simplemente puede mover el código a una función externa y llamarlo tanto dentro como fuera de setInterval :

 function myFunc() { if (Q.size() > 0) { let u = Q.dequeue(); if (u.end) { $(".r" + ux + "c" + uy).addClass("explored"); setTimeout(function() { clearInterval(BFStimer); }); endNode = u; return u; } let N = u.neighbor; for (let i = 0; i < N.length; i++) { if (N[i].isWall) { continue; } if (N[i].status === "undiscovered") { N[i].status = "discovered"; $(".r" + N[i].x + "c" + N[i].y).addClass("discovered"); N[i].parent = u; N[i].distance = u.distance + 1; Q.enqueue(N[i]); } } $(".r" + ux + "c" + uy).addClass("explored"); } } myFunc(); let BFStimer = setInterval(function() { myFunc(); }, 5);
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