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ě.