Java >> Java tutorial >  >> Java

Hvad svarer til Javas Thread.sleep() i JavaScript?

Det enkle svar er, at der ikke er en sådan funktion.

Det nærmeste, du har, er:

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

Bemærk, at du især ønsker ikke at vente travlt (f.eks. i en spin-loop), da din browser næsten helt sikkert udfører din JavaScript i et enkelt-trådsmiljø.

Her er et par andre SO-spørgsmål, der omhandler tråde i JavaScript:

  • JavaScript og tråde
  • Hvorfor understøtter JavaScript ikke multithreading?

Og dette spørgsmål kan også være nyttigt:

  • setTimeout - hvordan undgår man at bruge streng til tilbagekald?

Prøv med denne kode. Jeg håber, det er nyttigt for dig.

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

Forudsat at du er i stand til at bruge ECMAScript 2017, kan du efterligne lignende adfærd ved at bruge async/await og setTimeout. Her er et eksempel på en søvnfunktion:

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

Du kan derefter bruge dvalefunktionen i enhver anden asynkronfunktion som denne:

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

Det er rart, fordi det undgår at skulle ringe tilbage. Ulempen er, at den kun kan bruges i asynkrone funktioner. Bag kulisserne er testSleep-funktionen sat på pause, og efter at slumren er afsluttet, genoptages den.

Fra MDN:

Afvent-udtrykket får udførelse af asynkronfunktion til at pause, indtil et løfte er opfyldt eller afvist, og til at genoptage eksekvering af asynkronfunktion efter opfyldelse.

For en fuldstændig forklaring se:

  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function
  • https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

Java tag