Orden de ejecución de JavaScript con setTimeOut ()
-
27-10-2019 - |
Pregunta
Diga que tengo el siguiente código:
function testA {
setTimeout('testB()', 1000);
doLong();
}
function testB {
doSomething();
}
function doLong() {
//takes a few seconds to do something
}
Yo ejecuto testA()
. He leído que JavaScript es un solo hilo. Lo que sucede después de 1000 milisegundos, cuando el tiempo de espera para testB()
¿es alcanzado?
Algunas posibilidades que puedo pensar:
testB()
está en cola para ejecutar despuésdoLong()
Y cualquier otra cosa que llamó ha terminado.doLong()
se termina de inmediato ytestB()
Está empezado.doLong()
se da un poco más de tiempo para ejecutarse antes de detenerse (ya sea automáticamente o después de solicitar al usuario) ytestB()
Está empezado.doLong()
se detiene,testB()
Está empezado. DespuéstestB()
ha terminado,doLong()
currículums.
¿Cuál es la respuesta correcta? ¿Es dependiente de la implementación o parte del estándar?*
Esta pregunta es similar pero no lo mismo, por lo que puedo decir.
Se agradecería cualquier enlace que pueda recomendar para comprender mejor la ejecución de JavaScript.
¡Gracias!
*Sí, sé que no todos los navegadores siguen los estándares :(
Solución
La primera de tus conjeturas es la correcta:testB() is queued up to execute after doLong() and anything else it called have finished.
Si toma más de un segundo para testA
para terminar, testB
Simplemente tendrá que esperar.
Además, debes escribir setTimeout(testB, 1000)
más bien que setTimeout('testB()', 1000)
. Enviar una cadena a setTimeOut es, como usar eval
, Generalmente considerado malvado y te hará enemigos;)