Mám pocit, že čím dál víc javascriptových vývojářů používá nové jazykové kostrukce pro práci s asynchronním kódem, ale ne všichni mu rozumí jak by měli a jen slepě používají něco co viděli někde jinde. Proto naposledy tohle velice stručné, ale podle mě snad všeříkající shrnutí všech možných současných variant pro psaní asynchronních operací:
// definice funkce vracejici vysledek callbackem
function sumCallback(a, b, cb) {
cb(a + b);
}
// samotne volani funkce s vysledkem v callback funkci
sumCallback(20, 30, res => {
console.log(res);
});
// alternativa callbackove funkce realizavana pres Promises
function sumPromises(a, b) {
return new Promise(res => {
sumCallback(a, b, resCb => {
res(resCb);
});
});
}
// volani Promises funkce s then pro ziskani vysledku
sumPromises(20, 40).then(res => console.log(res));
// definice async funckce
// klicove slovo await jde pouzit jen uvnitr async funkce
async function sumAsync(a, b) {
return await sumPromises(a, b);
}
// volani async funkce
// abych mohl pouzit await, musim zabalit do async funkce
(async (a, b) => {
console.debug('start');
let res = await sumPromises(a, b);
console.log(res);
})(20, 70);
// uplne stejne jako vyse
// misto sumPromises je sumAsync
// protoze async/await je interne realizovan pres Promises... :)
(async (a, b) => {
console.debug('start');
let res = await sumAsync(a, b);
console.log(res);
})(20, 70);
Dodám, že v TypeScriptu se píše asynchronní kód úplně stejně.