async/await — это синтаксический сахар над промисами, который делает асинхронный код похожим на синхронный. Функция с async всегда возвращает Promise. await приостанавливает выполнение функции до тех пор, пока промис не зарезолвится. Для обработки ошибок используешь try/catch вместо .catch(). Под капотом это всё те же промисы, просто код читается линейно и проще для понимания. Единственный нюанс — await можно использовать только внутри async функции (или на верхнем уровне модуля).