Asynkroninen koodi takaisinkutsuilla JavaScriptissä
Oletetaan, että meillä on jokin asynkroninen funktio:
function make() {
setTimeout(function() {
console.log('1');
}, 3000);
}
Oletetaan, että käytämme tätä funktiota seuraavasti:
make();
console.log('2'); // suoritetaan ensimmäisenä
Oletetaan, että haluamme tehdä niin, että toinen
konsoliin tulostus suoritetaan vasta sen jälkeen,
kun asynkroninen operaatio
funktion sisällä on suoritettu.
Yksi tähän käytetyistä tavoista
on takaisinkutsun käyttö:
käärimme odottavan koodin anonyymifunktioon
ja välitämme sen parametrina funktiolle make:
make(function() {
console.log('2');
});
Tämä ei tietenkään itsessään ratkaise
tehtäväämme. Toistaiseksi olemme vain sopineet: jos haluat suorittaa koodin
make-funktion laukeamisen jälkeen,
väitä tämä koodi
takaisinkutsuna make-kutsun parametriksi.
Korjataan funktion make koodi niin,
että se alkaa toimia sopimuksen mukaisesti:
function make(callback) {
setTimeout(function() {
console.log('1'); // jokin asynkroninen operaatio, ei välttämättä vain yksi
callback(); // sitten meidän takaisinkutsumme
}, 3000);
}
Kerro, missä järjestyksessä numerot tulostuvat konsoliin:
function make(callback) {
setTimeout(function() {
console.log('1');
callback();
}, 3000);
}
make(function() {
console.log('2');
console.log('3');
});