Oproti synchronnímu zápisu je výše uvedený zápis pomocí promisů delší a méně přehledný
Pokud se kód v článku dá zapsat i synchronně, pak na něm buď nic asynchronního není a nemá smysl ho zapisovat jako promise nebo asynchronní je a pak nemá význam psát ho synchronně.
Dělá se to proto, abyste neblokoval vlákno. IMO je to lepší než nechat celou aplikaci v JS zatuhnout, dokud se požadavek nedokončí. Na CLR a JVM jsou zase vlákna drahá.
explicitní označování asynchronních funkcí
Potíž je, že takto označené funkce nejdou dost dobře používat uvnitř synchronních funkcí. Uvažte například pole promisů přes nějž iterujete pomocí
Array.forEach. Kdybyste chtěl jednotlivé promisy postupně asynchroně vykonat (tj. spustit první, počkat až doběhne, spustit druhý, počkat až doběhne, ...) uvnitř
forEach, tak to nejde bez zablokování vlákna.
Obecně když byste uvnitř nějaké synchronní funkce chtěl zavolat nějakou asynchronní funkci a počkat na její výsledek, tak to nejde bez zablokování vlákna, což je špatné - lepší by bylo, kdyby se z té synchronní funkce automaticky stala asynchronní a dokázala se vzdát svého vlákna - což se ale nestane.
Zablokování vlákna by samo o sobě nevadilo, kdyby vláken bylo dostatek a byla levná, což na mnoha platformách není - kdyby to tak bylo, tak by se nemuselo zavádět async a await.