JavaScript asynchronní


Obsah

    Zobrazit obsah

"Dokončím později!"

Funkce běžící paralelně s jinými funkcemi se nazývají asynchronní

Dobrým příkladem je JavaScript setTimeout()

Asynchronní JavaScript

Příklady použité v předchozí kapitole byly velmi zjednodušené.

Účelem příkladů bylo demonstrovat syntaxi funkcí zpětného volání:

Příklad

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

Zkuste to sami →

<!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>

Ve výše uvedeném příkladu je myDisplayer název funkce.

Je předán do myCalculator() jako argument.

V reálném světě se zpětná volání nejčastěji používají s asynchronními funkcemi.

Typickým příkladem je JavaScript setTimeout().


Čekání na časový limit

Při použití funkce JavaScript setTimeout(), můžete zadat funkci zpětného volání, která se má provést při vypršení časového limitu:

Příklad

setTimeout(myFunction, 3000);

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

Zkuste to sami →

<!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>

Ve výše uvedeném příkladu se jako zpětné volání používá myFunction.

myFunction je předán do setTimeout() jako argument.

3000 je počet milisekund před vypršením časového limitu, takže myFunction() bude volána po 3 sekundách.

Poznámka

Když předáváte funkci jako argument, pamatujte, že nepoužíváte závorky.

Vpravo: setTimeout(myFunction, 3000);

Špatně: setTimeout(myFunction(), 3000);

Místo předání názvu funkce jako argumentu jiné funkci, místo toho můžete vždy předat celou funkci:

Příklad

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

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

Zkuste to sami →

<!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>

Ve výše uvedeném příkladu function(){ myFunction("Miluji tě!!!"); } se používá jako zpětné volání. Je to kompletní funkce. Úplná funkce je předána funkci setTimeout() jako argument.

3000 je počet milisekund před vypršením časového limitu, takže myFunction() bude volána po 3 sekundách.



Intervaly čekání:

Při použití funkce JavaScript setInterval(), můžete zadat funkci zpětného volání, která se má provést pro každý interval:

Příklad

setInterval(myFunction, 1000);

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

Zkuste to sami →

<!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>

Ve výše uvedeném příkladu se jako zpětné volání používá myFunction.

myFunction je předán do setInterval() jako argument.

1000 je počet milisekund mezi intervaly, takže myFunction() bude volána každou sekundu.


Alternativy zpětného volání

Pomocí asynchronního programování mohou JavaScriptové programy spouštět dlouhotrvající úlohy, a paralelně spouštět další úkoly.

Ale asynchronní programy se obtížně zapisují a obtížně se ladí.

Z tohoto důvodu většina moderních asynchronních metod JavaScriptu nepoužívá zpětná volání. Místo toho se v JavaScriptu asynchronní programování řeší pomocí Promises.

Poznámka

O slibech se dozvíte v další kapitole tohoto tutoriálu.