Asynchroniczny kod z callbackami w JavaScript
Załóżmy, że mamy pewną asynchroniczną funkcję:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Załóżmy, że używamy tej funkcji w następujący sposób:
make();
console.log('2'); // wykona się pierwsze
Załóżmy, że chcemy, aby drugie
wypisanie do konsoli wykonało się po tym,
jak wykona się operacja asynchroniczna
wewnątrz funkcji.
Jednym z podejść używanych do tego,
jest użycie callbacka:
opakowujemy oczekujący kod w funkcję anonimową
i przekazujemy parametrem do funkcji make:
make(function() {
console.log('2');
});
Oczywiście, samo w sobie to nie rozwiąże naszego
problemu. Na razie po prostu przyjęliśmy następującą
konwencję: jeśli chcesz wykonać kod po
wywołaniu make, przekaj ten kod
callbackiem w wywołaniu make.
Poprawmy kod funkcji make tak, aby
zaczęła działać zgodnie z naszą
konwencją:
function make(callback) {
setTimeout(function() {
console.log('1'); // jakaś operacja asynchroniczna, może nie jedna
callback(); // potem nasz callback
}, 3000);
}
Opowiedz, w jakiej kolejności wypiszą się liczby w konsoli:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});