Asünkroonne kood koos tagasikutsetega JavaScriptis
Oletame, et meil on mingi asünkroonne funktsioon:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Oletame, et me kasutame seda funktsiooni järgmisel viisil:
make();
console.log('2'); // täidetakse esimesena
Oletame, et me tahame teha nii, et teine
väljund konsooli täidetakse peale seda,
kui asünkroonne operatsioon
funktsiooni sees on lõpetatud.
Üks lähenemisviise, mida selleks kasutatakse,
on tagasikutse kasutamine:
mähime ootava koodi anonüümsesse funktsiooni
ja edastame selle parameetrina funktsioonile make:
make(function() {
console.log('2');
});
Loomulikult ei lahenda see iseenesest meie
ülesannet. Seni oleme lihtsalt teinud järgmise
kokkuleppe: soovides koodi täita peale
funktsiooni make käivitamist, edastage see kood
tagasikutse funktsiooni make väljakutses.
Parandame funktsiooni make koodi nii, et
see hakkaks töötama vastavalt meie
kokkuleppele:
function make(callback) {
setTimeout(function() {
console.log('1'); // mingi asünkroonne operatsioon, võib olla mitte üks
callback(); // siis meie tagasikutse
}, 3000);
}
Kirjelda, millises järjekorras kuvatakse numbrid konsoolis:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});