Como não pude comentar, sou forçado a escrever este post. Eu recebi o código abaixo que atrasa / espera exatamente 1 segundos ou 1000 milissegundos -
let n = 5;
for (let i=1; i<n; i++)
{
setTimeout( function timer()
{
console.log("hello world");
}, i*1000 );
}
Mas como posso atrasá-lo * 1000 segundos em vez de 1000 milissegundos fixos, para que a espera dependa do número da iteração?
Por exemplo, se n = 5, quero o atraso do loop 1 segundo na 1ª iteração. 2 segundos na segunda iteração e assim por diante .. o atraso final será de 5 segundos.
javascript
wait
Mike
fonte
fonte
i
- se não o fizesse, obteria todos esses alertas ao mesmo tempo.Respostas:
Aqui está uma função que será exibida imediatamente, depois 1 segundo depois, 2 segundos depois, 3 segundos depois etc. Nenhuma matemática especial, nenhuma promessa necessária
fonte
Embora essa tarefa possa ser resolvida com promessas, fluxos reativos e outras ferramentas interessantes (ei, ninguém sugeriu o uso de trabalhadores ainda!), Ela também pode ser resolvida com um pouco de aritmética.
Portanto, você deseja tempos limite em uma sequência: 1s, o anterior + 2s, o anterior + 3s e assim por diante. Esta sequência é: 1, 3, 6, 10, 15 ... e sua fórmula é
a[n] = n * (n + 1) / 2
. Sabendo que...fonte
Você pode tentar usar async / waitit (Promises), para serializar seu código:
fonte
Levei algum tempo para decifrar sua pergunta xD, mas é isso que você quer?
Isso continuará disparando console.log com atraso de i * 1000 a cada vez. então, a primeira vez que durará 1 segundo (1 * 1000), a seguir, 2 segundos e assim por diante.
fonte
O loop não espera que a função de tempo limite seja concluída. Portanto, quando o loop é executado, ele agenda seu alerta para cada índice.
Você pode usar uma função que será executada de acordo com o seu índice, mas agendada ao mesmo tempo. Você pode sentir a diferença de 3 segundos.
fonte
Use chamadas recursivas em vez de loop for
fonte