Existe algum método JavaScript semelhante ao jQuery delay()
ou wait()
(para atrasar a execução de um script por um período específico)?
javascript
settimeout
Niyaz
fonte
fonte
function_reference
menos que você inclua()
. Ou seja,function_reference
é exatamente isso - uma referência; a passagemfunction_reference()
invocaria a função imediatamente.Apenas para acrescentar ao que todos os outros disseram sobre
setTimeout
: Se você quiser chamar uma função com um parâmetro no futuro, precisará configurar algumas chamadas de função anônimas.Você precisa passar a função como argumento para que ela seja chamada posteriormente. Com efeito, isso significa sem colchetes atrás do nome. O seguinte chamará o alerta de uma só vez e exibirá 'Hello world':
Para corrigir isso, você pode colocar o nome de uma função (como Flubba fez) ou pode usar uma função anônima. Se você precisar passar um parâmetro, precisará usar uma função anônima.
Mas se você executar esse código, notará que, após 2 segundos, o pop-up exibirá 'Hello Stack Overflow'. Isso ocorre porque o valor da variável a mudou nesses dois segundos. Para dizer 'Olá mundo' após dois segundos, você precisa usar o seguinte trecho de código:
Esperará 2 segundos e depois aparecerá 'Hello world'.
fonte
Só para expandir um pouco ... Você pode executar o código diretamente na
setTimeout
chamada, mas como o @patrick diz, você normalmente atribui uma função de retorno de chamada, assim. O tempo é milissegundosfonte
Se você realmente deseja ter uma função de bloqueio (síncrona)
delay
(por qualquer motivo), por que não fazer algo assim:fonte
delay
ing (para responder a esta pergunta ). Existe alguma maneira de fazer isso?Você precisa usar o setTimeout e passar uma função de retorno de chamada. O motivo pelo qual você não pode usar a suspensão no javascript é porque você impediria a página inteira de fazer qualquer coisa nesse meio tempo. Não é um bom plano. Use o modelo de evento do Javascript e fique feliz. Não lute contra isso!
fonte
Você também pode usar window.setInterval () para executar algum código repetidamente em intervalos regulares.
fonte
setTimeout()
faz isso uma vez,setInterval()
faz repetidamente. Se você deseja que seu código seja executado a cada 5 segundos,setInterval()
é feito para o trabalho.Para adicionar os comentários anteriores, gostaria de dizer o seguinte:
A
setTimeout()
função em JavaScript não pausa a execução do script em si, mas apenas informa ao compilador para executar o código em algum momento no futuro.Não existe uma função que possa pausar a execução incorporada ao JavaScript. No entanto, você pode escrever sua própria função que executa algo como um loop incondicional até que o tempo seja alcançado usando a
Date()
função e adicionando o intervalo de tempo necessário.fonte
Se você só precisa testar um atraso, pode usar o seguinte:
E então, se você quiser atrasar por 2 segundos, faça:
Pode não ser o melhor para a produção. Mais sobre isso nos comentários
fonte
por que você não pode colocar o código por trás de uma promessa? (digitado no topo da minha cabeça)
fonte
A resposta simples é:
A função acima aguarda 1 segundo (1000 ms) e define x como 1. Obviamente, este é um exemplo; você pode fazer o que quiser dentro da função anônima.
fonte
Gostei muito da explicação de Maurius (resposta mais votada) com os três métodos diferentes de chamada
setTimeout
.No meu código, desejo navegar automaticamente automaticamente para a página anterior após a conclusão de um evento de salvamento do AJAX. A conclusão do evento de salvamento possui uma leve animação no CSS, indicando que o salvamento foi bem-sucedido.
No meu código, encontrei uma diferença entre os dois primeiros exemplos:
Este não espera pelo tempo limite - o back () é chamado quase imediatamente, independentemente do número que eu coloquei para o atraso.
No entanto, altere isso para:
Isso faz exatamente o que eu estava esperando.
Isso não é específico para a operação back (), o mesmo acontece com
alert()
. Basicamente com oalert()
usado no primeiro caso, o tempo de atraso é ignorado. Quando eu rejeito o pop-up, a animação para o CSS continua.Portanto, eu recomendaria o segundo ou terceiro método que ele descreve, mesmo se você estiver usando funções internas e não argumentos.
fonte
Eu tinha alguns comandos ajax que queria executar com um atraso no meio. Aqui está um exemplo simples de uma maneira de fazer isso. Estou preparado para ser rasgado em pedaços, embora para a minha abordagem não convencional. :)
Você pode copiar o bloco de código e colá-lo em uma janela do console e ver algo como:
fonte
A solução mais simples para chamar sua função com atraso é:
fonte
função de atraso:
uso dentro da
async
função:fonte
Como já foi dito, setTimeout é a sua aposta mais segura.
Mas às vezes você não pode separar a lógica de uma nova função, então pode usar o Date.now () para obter milissegundos e fazer o atraso sozinho.
fonte