Asinhronais kods ar atsauksmēm JavaScript
Pieņemsim, ka mums ir kāda asinhrona funkcija:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Pieņemsim, ka mēs izmantojam šo funkciju šādi:
make();
console.log('2'); // izpildīsies pirmais
Pieņemsim, ka mēs vēlamies panākt, lai otrais
izvads konsolē izpildītos pēc tam,
kad izpildīsies asinhronā operācija
funkcijas iekšienē.
Viena no pieejām, ko šim nolūkam izmanto,
ir atsauksmes izmantošana:
ietinam gaidāmo kodu anonīmā funkcijā
un padodam to kā parametru funkcijai make:
make(function() {
console.log('2');
});
Protams, pats par sevi tas neatrisinās mūsu
uzdevumu. Pašlaik mēs vienkārši noslēdzām šādu
vienošanos: ja vēlaties izpildīt kodu pēc
make izpildes, nododiet šo kodu
atsauksmes veidā make izsaukumā.
Izlabosim funkcijas make kodu tā, lai
tā sāktu strādāt saskaņā ar mūsu
vienošanos:
function make(callback) {
setTimeout(function() {
console.log('1'); // kāda asinhronā operācija, var būt ne viena
callback(); // tad mūsu atsauksme
}, 3000);
}
Pastāstiet, kādā secībā konsolē tiks izvadīti skaitļi:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});