Asynkron kode med callbacks i JavaScript
Lad os sige, at vi har en asynkron funktion:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Lad os sige, vi bruger denne funktion på følgende måde:
make();
console.log('2'); // vil udføres først
Lad os sige, vi ønsker at gøre sådan, at den anden
konsoludskrift udføres efter at den asynkrone operation
inden i funktionen er udført.
En af de tilgange, der bruges til dette,
er brugen af en callback:
vi indkapsler koden, der venter, i en anonym funktion
og sender den som en parameter til funktionen make:
make(function() {
console.log('2');
});
Selvfølgelig løser dette ikke i sig selv vores
opgave. Indtil videre har vi blot lavet følgende
aftale: hvis du ønsker at udføre kode efter
make udløses, så send denne kode
som en callback til make kaldet.
Lad os rette koden for funktionen make, så
den begynder at arbejde i overensstemmelse med vores
aftale:
function make(callback) {
setTimeout(function() {
console.log('1'); // en eller anden asynkron operation, måske ikke kun én
callback(); // derefter vores callback
}, 3000);
}
Forklar, i hvilken rækkefølge tallene vil blive vist i konsollen:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});