Existe uma maneira de configurar o setInterval
método de javascript para executar o método imediatamente e depois executar com o timer
javascript
setinterval
Jorge
fonte
fonte
function
uma vez e depois fazer osetInterval()
Respostas:
É mais simples chamar a função diretamente diretamente na primeira vez:
No entanto, existem boas razões para evitar
setInterval
- em particular em algumas circunstâncias, uma grande quantidade desetInterval
eventos pode chegar imediatamente um após o outro, sem demora. Outro motivo é que, se você deseja interromper o loop, deve ligar explicitamente, oclearInterval
que significa que é necessário lembrar o identificador retornado dasetInterval
chamada original .Portanto, um método alternativo é
foo
acionar-se para chamadas subseqüentes usandosetTimeout
:Isso garante que haja pelo menos um intervalo
delay
entre as chamadas. Isso também facilita o cancelamento do loop, se necessário - você não ligasetTimeout
quando a condição de encerramento do loop é atingida.Melhor ainda, você pode agrupar tudo isso em uma expressão de função chamada imediatamente que cria a função, que então se chama novamente como acima, e inicia automaticamente o loop:
que define a função e inicia o ciclo de uma só vez.
fonte
setTimeout
?setInterval
eventos pode chegar imediatamente um após o outro, sem demora.setTimeout
método?Não tenho certeza se estou entendendo corretamente, mas você poderia facilmente fazer algo assim:
Obviamente, existem várias maneiras de fazer isso, mas é a maneira mais concisa em que consigo pensar.
fonte
arguments.callee
não está disponível no modo estrito ES5Eu me deparei com essa pergunta devido ao mesmo problema, mas nenhuma das respostas ajuda se você precisar se comportar exatamente como o normal,
setInterval()
mas com a única diferença de que a função é chamada imediatamente no início.Aqui está a minha solução para este problema:
A vantagem desta solução:
setInterval
pode ser facilmente adaptado por substituiçãoclearInterval()
mais tardeExemplo:
Para ser atrevido, se você realmente precisar usar
setInterval
, também poderá substituir o originalsetInterval
. Portanto, nenhuma alteração de código é necessária ao adicionar isso antes do código existente:Ainda assim, todas as vantagens listadas acima se aplicam aqui, mas nenhuma substituição é necessária.
fonte
setTimeout
solução porque ela retorna umsetInterval
objeto. Para evitar chamar funções que talvez estejam mais tarde no código e, portanto, indefinidas no momento atual, envolvo a primeira chamada de função em umasetTimeout
função como esta:setTimeout(function(){ func();},0);
A primeira função é chamada após o ciclo de processamento atual, que também é imediato , mas é mais erros comprovados.Você pode agrupar
setInterval()
uma função que fornece esse comportamento:... então use-o assim:
fonte
Aqui está um invólucro para analisá-lo, se você precisar:
Defina o terceiro argumento de setInterval como true e ele será executado pela primeira vez imediatamente após chamar setInterval:
Ou omita o terceiro argumento e ele manterá seu comportamento original:
Alguns navegadores suportam argumentos adicionais para setInterval que esse wrapper não leva em consideração; Penso que estes raramente são utilizados, mas tenha isso em mente se você precisar deles.
fonte
Para alguém precisa trazer o exterior para
this
dentro como se fosse uma função de seta.Se o lixo produzido acima o incomoda, você pode fazer um fechamento.
Ou talvez considere usar o
@autobind
decorador, dependendo do seu código.fonte
Vou sugerir a chamada das funções na seguinte sequência
Você também pode passar
_timer
para o foo, se quiserclearInterval(_timer)
em uma determinada condiçãofonte
Aqui está uma versão simples para iniciantes, sem toda a confusão. Apenas declara a função, chama e depois inicia o intervalo. É isso aí.
fonte
Para resolver esse problema, eu executo a função pela primeira vez após o carregamento da página.
fonte
Existe um pacote npm conveniente chamado firstInterval (divulgação completa, é meu).
Muitos dos exemplos aqui não incluem manipulação de parâmetros, e alterar comportamentos padrão de
setInterval
qualquer projeto grande é ruim. Dos documentos:Esse padrão
é idêntico a
Se você é da velha escola no navegador e não quer a dependência, é fácil copiar e colar do código.
fonte
Ok, isso é tão complexo, então, deixe-me simplificar:
fonte
Você pode definir um atraso inicial muito pequeno (por exemplo, 100) e configurá-lo para o atraso desejado na função:
fonte
Há um problema com a chamada assíncrona imediata de sua função, porque o setTimeout / setInterval padrão tem um tempo limite mínimo de vários milissegundos, mesmo que você o defina diretamente como 0. Isso foi causado por um trabalho específico do navegador.
Um exemplo de código com um atraso zero REAL que funciona no Chrome, Safari, Opera
Você pode encontrar mais informações aqui
E após a primeira chamada manual, você pode criar um intervalo com sua função.
fonte
na verdade, o mais rápido é fazer
isso chamará de função e, em seguida, fará isso de novo a cada 45 segundos, o que é diferente de fazer
que não vai chamar, mas agendar apenas
fonte
myFunction()
retornar automaticamente. Em vez disso, modificar cada função a ser chamada porsetInterval
ela é uma abordagem melhor para agruparsetInterval
uma vez, como as outras respostas estão propondo.