Asynchronní kód s callbacky v JavaScriptu
Předpokládejme, že máme nějakou asynchronní funkci:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Předpokládejme, že tuto funkci používáme následujícím způsobem:
make();
console.log('2'); // provede se první
Předpokládejme, že chceme, aby se druhý
výpis do konzole provedl až poté,
co se dokončí asynchronní operace
uvnitř funkce.
Jedním z přístupů, které se k tomu používají,
je použití callbacku:
zabalíme kód, který má čekat, do anonymní funkce
a předáme ji jako parametr funkci make:
make(function() {
console.log('2');
});
Samozřejmě, samo o sobě to náš problém
nevyřeší. Zatím jsme pouze uzavřeli tuto
dohodu: při přání spustit kód po
provedení make předejte tento kód
jak callback při volání make.
Upravme kód funkce make tak, aby
začala pracovat v souladu s naší
dohodou:
function make(callback) {
setTimeout(function() {
console.log('1'); // nějaká asynchronní operace, nemusí být jen jedna
callback(); // poté náš callback
}, 3000);
}
Vysvětlete, v jakém pořadí se vypíšou čísla do konzole:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});