Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

228
Visualizações
El orden de ejecución de la función de devolución de llamada setTimeout y AJAX onload

Soy bastante nuevo en javascript y después de tener una comprensión básica de cómo el bucle de eventos, la cola de devolución de llamada y las API web funcionan juntas para lograr la asincronía en Javascript. Tengo un siguiente código simple que incluye setTimeout y AJAX para probar si mi comprensión del orden de ejecución del código es correcta o no.

 setTimeout(() => { alert('timeout1') }, 0); req = new XMLHttpRequest(); req.open("get", "https://reqres.in/api/products/3"); req.onload = function(data) { alert('request done'+data.target.responseText); }; req.send(); alert('123'); alert('456'); alert('789');
 hello,world

Esperaba que el resultado fuera como:

alerta('123') -> alerta('456') -> alerta('789') -> alerta('tiempo de espera1') -> alerta('solicitud realizada')

Lo que estaba pensando es que primero setTimeout() pertenece a la API del navegador, por lo que aparecerá de la pila de llamadas de javascript y se ejecutará fuera del motor de javascript, luego los scripts seguirán ejecutando la siguiente línea de código. Cuando llegó a la línea req.send() , también se ejecutará fuera del motor de javascript y luego los scripts continuarán.

Y dado que configuré el tiempo de espera en 0 segundos, la función de devolución de llamada setTimeout() ()=>{alert('timeout1')} se insertará en la cola de devolución de llamada primero antes de la función de devolución de llamada req.onload function(){alert('request done');} (después de todo, la solicitud debe tomar algún tiempo para esperar la respuesta, incluso si es súper rápida). Entonces, el orden de ejecución después de que la pila de llamadas esté vacía sería

  1. alerta('tiempo de espera1')
  2. alerta('solicitud realizada')

Pero el resultado es:

alerta('123') -> alerta('456') -> alerta('789') -> alerta('solicitud realizada') -> alerta('tiempo de espera1')

Aparentemente, mi pensamiento está equivocado. Pero simplemente no puedo resolverlo.

Por favor corrígeme si me equivoqué en esto. ¡Gracias por revisar mi pregunta!

about 4 years ago · Juan Pablo Isaza
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda