Asynchrónny kód s callback funkciami v JavaScripte
Majme nejakú asynchrónnu funkciu:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Predpokladajme, že túto funkciu používame nasledovne:
make();
console.log('2'); // vykoná sa prvým
Predpokladajme, že chceme dosiahnuť, aby sa druhý
výstup do konzoly vykonal až po tom,
ako sa dokončí asynchrónna operácia
vo vnútri funkcie.
Jedným z prístupov, ktoré sa na to používajú,
je použitie callback funkcie:
zabalíme kód, ktorý chceme vykonať neskôr, do anonymnej funkcie
a odovzdáme ju ako parameter funkcii make:
make(function() {
console.log('2');
});
Samozrejme, samo o sebe to našu úlohu
nevyrieši. Zatiaľ sme len uzavreli dohodu: ak chcete vykonať kód po
spustení make, odovzdajte tento kód
ako callback funkciu pri volaní make.
Upravme kód funkcie make tak, aby
začala fungovať v súlade s našou
dohodou:
function make(callback) {
setTimeout(function() {
console.log('1'); // nejaká asynchrónna operácia, nemusí byť len jedna
callback(); // potom náš callback
}, 3000);
}
Vysvetlite, v akom poradí sa vypíšu čísla do konzoly:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});