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

198
Visualizações
Espere 5 segundos antes de ejecutar la siguiente línea

Esta función a continuación no funciona como yo quiero; siendo un novato de JS, no puedo entender por qué.

Necesito que espere 5 segundos antes de verificar si newState es -1 .

Actualmente, no espera, simplemente verifica de inmediato.

 function stateChange(newState) { setTimeout('', 5000); if(newState == -1) { alert('VIDEO HAS STOPPED'); } }
over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Debe poner su código en la función de devolución de llamada que proporciona a setTimeout :

 function stateChange(newState) { setTimeout(function () { if (newState == -1) { alert('VIDEO HAS STOPPED'); } }, 5000); }

Cualquier otro código se ejecutará inmediatamente.

over 4 years ago · Santiago Trujillo Relatório

0

Navegador

Aquí hay una solución que usa la nueva sintaxis async/await .

Asegúrese de comprobar la compatibilidad del navegador, ya que se trata de una función de lenguaje introducida con ECMAScript 6.

Función de utilidad:

 const delay = ms => new Promise(res => setTimeout(res, ms));

Uso:

 const yourFunction = async () => { await delay(5000); console.log("Waited 5s"); await delay(5000); console.log("Waited an additional 5s"); };

La ventaja de este enfoque es que hace que su código se vea y se comporte como código síncrono.

Nodo.js

Node.js 16 proporciona una versión integrada de setTimeout que se basa en promesas para que no tengamos que crear nuestra propia función de utilidad:

 import { setTimeout } from "timers/promises"; const yourFunction = async () => { await setTimeout(5000); console.log("Waited 5s"); await setTimeout(5000); console.log("Waited an additional 5s"); };
over 4 years ago · Santiago Trujillo Relatório

0

Realmente no debería estar haciendo esto , el uso correcto del tiempo de espera es la herramienta adecuada para el problema del OP y cualquier otra ocasión en la que solo desee ejecutar algo después de un período de tiempo. Joseph Silber lo ha demostrado bien en su respuesta. Sin embargo, si en algún caso de no producción realmente desea colgar el hilo principal durante un período de tiempo, esto lo hará.

 function wait(ms){ var start = new Date().getTime(); var end = start; while(end < start + ms) { end = new Date().getTime(); } }

Con ejecución en la forma:

 console.log('before'); wait(7000); //7 seconds in milliseconds console.log('after');

Llegué aquí porque estaba creando un caso de prueba simple para secuenciar una combinación de operaciones asincrónicas en torno a operaciones de bloqueo de ejecución prolongada (es decir, manipulación DOM costosa) y esta es mi operación de bloqueo simulada. Se adapta bien a ese trabajo, así que pensé en publicarlo para cualquier otra persona que llegue aquí con un caso de uso similar. Aun así, está creando un objeto Date() en un bucle while, lo que podría abrumar al GC si se ejecuta el tiempo suficiente. Pero no puedo enfatizar lo suficiente, esto solo es adecuado para pruebas, para construir cualquier funcionalidad real, debe consultar la respuesta de Joseph Silber.

over 4 years ago · Santiago Trujillo Relatório
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