Асинхронен код со повици во JavaScript
Да претпоставиме дека имаме некоја асинхрона функција:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Да претпоставиме дека ја користиме оваа функција на следниов начин:
make();
console.log('2'); // ќе се изврши прво
Да претпоставиме дека сакаме да направиме така што вториот
запис во конзолата да се изврши откако
ќе се изврши асинхроната операција
внатре во функцијата.
Еден од пристапите кои се користат за ова
е користење на повик:
да го завиткаме кодот што чека во анонимна функција
и да го пренесеме како параметар во функцијата make:
make(function() {
console.log('2');
});
Се разбира, самото ова нема да ја реши нашата
задача. Засега само склучивме следниот
договор: ако сакате да извршите код после
активирањето на make, пренесете го тој код
како повик во повикот make.
Да го поправиме кодот на функцијата make така што
таа ќе почне да работи во согласност со нашиот
договор:
function make(callback) {
setTimeout(function() {
console.log('1'); // некоја асинхрона операција, можеби не една
callback(); // потоа нашиот повик
}, 3000);
}
Објаснете, во кој редослед ќе се испишат броевите во конзолата:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});