Asinchroninis kodas su atgalinio iškvietimo funkcijomis JavaScript
Tarkime, kad turime kokią nors asinchroninę funkciją:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Tarkime, kad naudojame šią funkciją taip:
make();
console.log('2'); // įvyks pirmas
Tarkime, kad norime padaryti taip, kad antroji
išvestis į konsolę įvyktų po to,
kai bus įvykdyta asinchroninė operacija
funkcijos viduje.
Vienas iš tam naudojamų būdų
yra atgalinio iškvietimo funkcijų naudojimas:
apgaubiama laukiamą kodą anonime funkcija
ir perduodama parametru į funkciją make:
make(function() {
console.log('2');
});
Žinoma, tai pati savaime neišspręs mūsų
užduoties. Kol kas mes tiesiog sudarėme tokį
sutartį: norėdami vykdyti kodą po
make suveikimo, perduokite tą kodą
atgalinio iškvietimo funkcija į make iškvietimą.
Pataisykime funkcijos make kodą taip, kad
ji pradėtų veikti pagal mūsų
sutartį:
function make(callback) {
setTimeout(function() {
console.log('1'); // kaž kokia asinchroninė operacija, gali būti ne viena
callback(); // tada mūsų atgalinio iškvietimo funkcija
}, 3000);
}
Paaiškinkite, kokia tvarka bus išvesti skaičiai konsolėje:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});