Це запитання дуже часто задають в контексті розмови про Promise чи Event Loop. Якщо дуже коротко, то різниці з технічної точки зору немає. Можна сказати, що async/await це синтаксичний цукор поверх chaining, який дозволяє писати асинхронний код в синхронному стилі, як це прийнято в більшості мов програмування, наприклад C#.
Вибір між chaining i async/await - це справа смаку, але як показує практика, синхронний стиль написання набагато зрозуміліший і зазвичай, вибір більшості розробників - це async/await.
Розглянемо приклад
// Використання chaining
fetchData()
.then(result => console.log(result))
.catch(error => console.error(error));
// Той самий код, але в async/await стилі
async function run() {
try {
const result = await fetchData();
console.log(final);
} catch (error) {
console.error(error);
}
}