Asynkroninen JavaScript
"I will finish later!"
Toisten toimintojen kanssa rinnakkain suoritettavat funktiot kutsutaan asynkroonisiksi (asynchronous)
Hyvä esimerkki on JavaScript setTimeout()
Asynkroninen JavaScript
Edellisessä luvussa käytetyt esimerkit on yksinkertaistettu merkittävästi.
Tarkoituksena on näyttää paluutoiminnon syntaksi:
Esimerkki
function myDisplayer(some) { document.getElementById("demo").innerHTML = some; } function myCalculator(num1, num2, myCallback) { let sum = num1 + num2; myCallback(sum); } myCalculator(5, 5, myDisplayer);
Yllä olevassa esimerkissämyDisplayer
On funktion nimi.
Se välitetään parametrina: myCalculator();
。
Todellisessa maailmassa paluutoimintoja käytetään usein yhdessä asynkronisten funktioiden kanssa.
Yksi tyypillinen esimerkki on JavaScript setTimeout();
。
Odota aikakatkaisua
Kun käytät JavaScript-funktioita setTimeout();
Voit määrittää paluutoiminnon, joka suoritetaan aikakatkaisun jälkeen:
Esimerkki
setTimeout(myFunction, 3000); function myFunction() { document.getElementById("demo").innerHTML = "I love You !!"; }
Yllä olevassa esimerkissämyFunction
Käytetään paluutoiminnoksi.
funktion (funktionsnimike) toimittaminen parametrina setTimeout();
。
3000 on milisekuntien välinen ajanjakso ennen aikakatkaisua, joten 3 sekunnin kuluttua kutsutaan myFunction()
。
Kun välität funktion parametrina, muista olla käyttämättä sulkeita.
Oikein: setTimeout(myFunction, 3000);
Virhe: setTimeout(myFunction(), 3000);
Jos et välitä funktiota nimellä parametrina toiselle funktiolle, voit aina välittää koko funktion:
Esimerkki
setTimeout(function() { myFunction("I love You !!!"); }, 3000); function myFunction(value) {}} document.getElementById("demo").innerHTML = value; }
Yllä olevassa esimerkissäfunction(){ myFunction("I love You !!!"); }
paluutoiminto. Se on täysin toimiva funktio. Täysin toimiva funktio annetaan parametrina setTimeout().
3000 on milisekuntien välinen ajanjakso ennen aikakatkaisua, joten 3 sekunnin kuluttua kutsutaan myFunction()
。
Odota ajanjaksoa:
Kun käytät JavaScript-funktioita setInterval()
voimassa, voit määrittää paluutoiminnon joka suoritetaan jokaisella ajanjaksolla:
Esimerkki
setInterval(myFunction, 1000); function myFunction() { let d = new Date(); document.getElementById("demo").innerHTML= d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds(); }
Yllä olevassa esimerkissämyFunction
paluutoiminnoksi.
funktion (funktionsnimike) toimittaminen parametrina setInterval()
。
1000 on milisekuntien välinen ajanjakso, joten myFunction()
Kutsutaan sekunnissa kerran.
Odota tiedoston lataamista
Jos luot funktioita, jotka lataavat ulkoisia resursseja (kuten skriptejä tai tiedostoja), et voi käyttää näitä sisältöjä ennen kuin ne on täysin ladattu.
Tämä on paras hetki käyttää paluutoimintoja.
Tässä esimerkissä ladataan HTML-tiedosto (mycar.html
), ja näytä HTML-tiedosto verkkosivulla, kun se on täysin ladattu:
Odota tiedoston lataamista:
function myDisplayer(some) { document.getElementById("demo").innerHTML = some; } function getFile(myCallback) { let req = new XMLHttpRequest(); req.open('GET', "mycar.html"); req.onload = function() { if (req.status == 200) { myCallback(this.responseText); } else { myCallback("Virhe: " + req.status); } } req.send(); } getFile(myDisplayer);
Yllä olevassa esimerkissämyDisplayer
paluutoiminnoksi.
funktion (funktionsnimike) toimittaminen parametrina getFile()
。
Seuraavaksi: mycar.html
kopioksi:
mycar.html
<img src="img_car.jpg" alt="Nice car" style="width:100%"> <p>Auto on pyörillä varustettu, itsellään voitelty moottoriväline, jota käytetään liikenteessä.</p> <p>Useimmat termiä koskevat määritelmät määrittelevät, että autot on suunniteltu ajamaan pääasiassa teillä, niillä on yhdestä kahdeksaan istumapaikkaa ja ne yleensä ovat nelipyöräisiä.</p> <p>(Wikipedia)</p>