Cod asincron cu callback-uri în JavaScript
Să presupunem că avem o anumită funcție asincronă:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Să presupunem că folosim această funcție în felul următor:
make();
console.log('2'); // se va executa primul
Să presupunem că vrem să facem astfel încât al doilea
afișaj în consolă să se execute după ce
se va finaliza operația asincronă
în interiorul funcției.
Una dintre abordările utilizate pentru aceasta
este utilizarea unui callback:
înfășurăm codul care așteaptă într-o funcție anonimă
și o transmitem ca parametru funcției make:
make(function() {
console.log('2');
});
Desigur, asta în sine nu ne va rezolva
problema. Deocamdată am stabilit pur și simplu
următoarea înțelegere: dacă doriți să executați cod după
activarea make, transmiteți acel cod
ca un callback la apelul make.
Să corectăm codul funcției make astfel încât
ea să înceapă să funcționeze în conformitate cu
înțelegerea noastră:
function make(callback) {
setTimeout(function() {
console.log('1'); // o operație asincronă oarecare, poate fi nu una singură
callback(); // apoi callback-ul nostru
}, 3000);
}
Spuneți în ce ordine se vor afișa numerele în consolă:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});