Асінхронны код з калбэкамі ў 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');
});