Asinhrona koda s povratnimi klici v JavaScript
Recimo, da imamo neko asinhrono funkcijo:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Recimo, da to funkcijo uporabimo na naslednji način:
make();
console.log('2'); // se bo izvedel prvi
Recimo, da želimo narediti tako, da se drugi
izpis v konzolo izvede šele po tem,
ko se izvede asinhrona operacija
znotraj funkcije.
En od pristopov, ki se uporablja za to,
je uporaba povratnega klica:
ovijmo kodo, ki čaka, v anonimno funkcijo
in jo posredujemo kot parameter funkciji make:
make(function() {
console.log('2');
});
Seveda samo po sebi to ne bo rešilo naše
naloge. Za zdaj smo samo sklenili naslednje
dogovor: če želite izvesti kodo po
zagonu make, posredujte to kodo
kot povratni klic v klic make.
Popravimo kodo funkcije make tako, da
bo začela delovati v skladu z našim
dogovorom:
function make(callback) {
setTimeout(function() {
console.log('1'); // neka asinhrona operacija, morda ne ena sama
callback(); // nato naš povratni klic
}, 3000);
}
Povejte, v kakšnem vrstnem redu se bodo izpisale številke v konzolo:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});