Qual é o equivalente do Thread.sleep () do Java em JavaScript?

Qual é o equivalente do Thread.sleep() do Java em JavaScript?

A resposta simples é que não existe tal function.

A coisa mais próxima que você tem é:

 var millisecondsToWait = 500; setTimeout(function() { // Whatever you want to do after the wait }, millisecondsToWait); 

Observe que você não quer esperar ocupado (por exemplo, em um loop de giro), já que seu navegador quase certamente está executando seu JavaScript em um ambiente de encadeamento único.

Aqui estão algumas outras perguntas do SO que lidam com threads em JavaScript:

  • JavaScript e Threads
  • Por que o JavaScript não suporta multithreading?

E esta questão também pode ser útil:

  • setTimeout – como evitar o uso de string para callback?

Tente com este código. Espero que seja útil para você.

 function sleep(seconds) { var e = new Date().getTime() + (seconds * 1000); while (new Date().getTime() <= e) {} } 

Não há equivalente direto, pois pausaria uma página da web. No entanto, há um setTimeout () , por exemplo:

 function doSomething() { thing = thing + 1; setTimeout(doSomething, 500); } 

Exemplo de encerramento (obrigado Daniel):

 function doSomething(val) { thing = thing + 1; setTimeout(function() { doSomething(val) }, 500); } 

O segundo argumento é milissegundos antes de triggersr, você pode usar isso para events de tempo ou aguardar antes de executar uma operação.

Editar: Atualizado com base nos comentários de um resultado mais limpo.

Assumindo que você é capaz de usar o ECMAScript 2017, você pode emular um comportamento similar usando async / wait e setTimeout. Aqui está um exemplo de function sleep:

 async function sleep(msec) { return new Promise(resolve => setTimeout(resolve, msec)); } 

Você pode então usar a function sleep em qualquer outra function assíncrona como esta:

 async function testSleep() { console.log("Waiting for 1 second..."); await sleep(1000); console.log("Waiting done."); // Called 1 second after the first console.log } 

Isso é bom porque evita a necessidade de um retorno de chamada. O lado negativo é que ele só pode ser usado em funções assíncronas. Nos bastidores, a function testSleep é pausada e, após a conclusão do sono, ela é retomada.

De MDN:

A expressão await faz com que a execução da function assíncrona pause até que um Promise seja preenchido ou rejeitado e para continuar a execução da function assíncrona após o cumprimento.

Para uma explicação completa, veja:

Você pode escrever um loop de rotação (um loop que apenas faz um loop por um longo período de tempo executando algum tipo de cálculo para atrasar a function) ou usar:

 setTimeout("Func1()", 3000); 

Isso irá chamar ‘Func1 ()’ após 3 segundos.

Editar:

O crédito vai para os comentadores, mas você pode passar funções anônimas para setTimeout.

 setTimeout(function() { //Do some stuff here }, 3000); 

Isso é muito mais eficiente e não invoca a function eval do javascript.

setTimeout não seria mantido e retomado em seu próprio thread, no entanto Thread.sleep faz. Não há igual real em JavaScript

Para a melhor solução, use async / await statement para o script ecma 2017

aguardar pode usar apenas dentro da function assíncrona

 function sleep(time) { return new Promise((resolve) => { setTimeout(resolve, time || 1000); }); } await sleep(10000); //this method wait for 10 sec. 

Nota: async / await não é realmente interrompido thread como Thread.sleep mas simulá-lo

Ou talvez você possa usar a function setInterval, para chamar uma function específica, após o número especificado de milissegundos. Basta fazer um google para o protótipo setInterval.Eu não me recordo.

Isso eventualmente me ajudou:

  var x = 0; var buttonText = 'LOADING'; $('#startbutton').click(function(){ $(this).text(buttonText); window.setTimeout(addDotToButton,2000); }) function addDotToButton(){ x++; buttonText += '.'; $('#startbutton').text(buttonText); if (x < 4) window.setTimeout(addDotToButton, 2000); else location.reload(true); }