Aszinkron kód callback-ekkel JavaScriptben
Tegyük fel, hogy van egy aszinkron funkciónk:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Tegyük fel, hogy a következőképpen használjuk ezt a funkciót:
make();
console.log('2'); // ez fog először lefutni
Tegyük fel, hogy azt szeretnénk elérni, hogy a második
konzol kiírás csak azután fusson le,
miután a funkción belüli aszinkron művelet
befejeződött.
Az egyik ehhez használt megközelítés
a callback használata:
csomagoljuk a várakozó kódot egy anonim funkcióba
és adjuk át paraméterként a make funkciónak:
make(function() {
console.log('2');
});
Természetesen ez önmagában még nem oldja meg a
problémánkat. Egyelőre csak egy megállapodást kötöttünk: ha kódot szeretnél futtatni a
make lefutása után, add át ezt a kódot
callback-ként a make hívásakor.
Módosítsuk a make funkció kódját úgy,
hogy az kezdjen el a megállapodásnak megfelelően
működni:
function make(callback) {
setTimeout(function() {
console.log('1'); // valamilyen aszinkron művelet, lehet, hogy nem is egy
callback(); // majd a mi callback-ünk
}, 3000);
}
Mesélje el, milyen sorrendben jelennek meg a számok a konzolon:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});