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