JavaScript asynkron


Indholdsfortegnelse

    Vis indholdsfortegnelse

"Jeg afslutter senere!"

Funktioner, der kører parallelt med andre funktioner, kaldes asynkrone

Et godt eksempel er JavaScript setTimeout()

Asynkron JavaScript

Eksemplerne brugt i det foregående kapitel var meget forenklede.

Formålet med eksemplerne var at demonstrere syntaksen for tilbagekaldsfunktioner:

Eksempel

 function myDisplayer(something) {
  document.getElementById("demo").innerHTML 
  = something;
}
function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  
  myCallback(sum);
}
myCalculator(5, 5, myDisplayer);

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>Callback Functions</h2>

<p>The result of the calculation is:</p>
<p id="demo"></p>

<script>
function myDisplayer(something) {
  document.getElementById("demo").innerHTML = something;
}

function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  myCallback(sum);
}

myCalculator(5, 5, myDisplayer);
</script>

</body>
</html>

I eksemplet ovenfor er myDisplayer navnet på en funktion.

Det sendes til myCalculator() som et argument.

I den virkelige verden bruges tilbagekald oftest med asynkrone funktioner.

Et typisk eksempel er JavaScript setTimeout().


Venter på en timeout

Når du bruger JavaScript-funktionen setTimeout(), du kan angive en tilbagekaldsfunktion, der skal udføres ved timeout:

Eksempel

setTimeout(myFunction, 3000);

function myFunction() {
  document.getElementById("demo").innerHTML = "I love You !!";
}

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>setTimeout() with a Callback</h2>

<p>Wait 3 seconds (3000 milliseconds) for this page to change.</p>

<h1 id="demo"></h1>

<script>
setTimeout(myFunction, 3000);

function myFunction() {
  document.getElementById("demo").innerHTML = "I love You !!";
}
</script>

</body>
</html>

I eksemplet ovenfor bruges myFunction som et tilbagekald.

myFunction sendes til setTimeout() som et argument.

3000 er antallet af millisekunder før time-out, så myFunction() vil blive kaldt efter 3 sekunder.

Bemærk

Når du sender en funktion som argument, så husk ikke at bruge parentes.

Højre: setTimeout(myFunction, 3000);

Forkert: setTimeout(myFunction(), 3000);

I stedet for at overføre navnet på en funktion som et argument til en anden funktion, du kan altid sende en hel funktion i stedet for:

Eksempel

setTimeout(function() { myFunction("I love You !!!"); }, 3000);

function myFunction(value) {
  document.getElementById("demo").innerHTML = value;
}

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>setInterval() with a Callback</h2>

<p>Wait 3 seconds (3000 milliseconds) for this page to change.</p>

<h1 id="demo"></h1>

<script>
setTimeout(function() { myFunction("I love You !!!"); }, 3000);

function myFunction(value) {
  document.getElementById("demo").innerHTML = value;
}
</script>

</body>
</html>

I eksemplet ovenfor, function(){ myFunction("Jeg elsker dig !!!"); } bruges som tilbagekald. Det er en komplet funktion. Den komplette funktion sendes til setTimeout() som et argument.

3000 er antallet af millisekunder før time-out, så myFunction() vil blive kaldt efter 3 sekunder.



Venter på intervaller:

Når du bruger JavaScript-funktionen setInterval(), du kan angive en tilbagekaldsfunktion, der skal udføres for hvert interval:

Eksempel

setInterval(myFunction, 1000);

function myFunction() {
  let d = new Date();
  document.getElementById("demo").innerHTML=
  d.getHours() + ":" +
  d.getMinutes() + ":" + 
  d.getSeconds();
}

Prøv det selv →

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript Functions</h1>
<h2>setInterval() with a Callback</h2>

<p>Using setInterval() to display the time every second (1000 milliseconds).</p>

<h1 id="demo"></h1>

<script>
setInterval(myFunction, 1000);

function myFunction() {
  let d = new Date();
  document.getElementById("demo").innerHTML=
  d.getHours() + ":" +
  d.getMinutes() + ":" +
  d.getSeconds();
}
</script>

</body>
</html>

I eksemplet ovenfor bruges myFunction som et tilbagekald.

myFunction sendes til setInterval() som et argument.

1000 er antallet af millisekunder mellem intervaller, altså myFunction() kaldes hvert sekund.


Tilbagekaldsalternativer

Med asynkron programmering kan JavaScript-programmer starte langvarige opgaver, og fortsætte med at køre andre opgaver parallelt.

Men asynkrone programmer er svære at skrive og svære at fejlfinde.

På grund af dette bruger de fleste moderne asynkrone JavaScript-metoder ikke tilbagekald. I stedet løses asynkron programmering i JavaScript ved hjælp af Promises i stedet.

Bemærk

Du vil lære om løfter i det næste kapitel i denne øvelse.