JavaScript async await

`async` и `await` — это ключевые слова в JavaScript, которые упрощают работу с асинхронным кодом. Они позволяют писать асинхронный код, который выглядит и ведет себя как синхронный, что делает его более читаемым и управляемым. ### `async` Ключевое слово `async` используется для объявления асинхронной функции. Асинхронная функция возвращает промис (Promise), даже если в её теле нет явного возврата промиса. Пример: ```javascript async function myAsyncFunction() { return 42; } myAsyncFunction().then(result => { console.log(result); // 42 }); ``` ### `await` Ключевое слово `await` используется внутри асинхронной функции для ожидания выполнения промиса. Оно приостанавливает выполнение функции до тех пор, пока промис не будет выполнен или отклонен. Пример: ```javascript async function fetchData() { const response = await fetch('https://api.example.com/data'); const data = await response.json(); return data; } fetchData().then(data => { console.log(data); }); ``` ### Как это работает вместе Комбинация `async` и `await` позволяет писать асинхронный код, который выглядит и ведет себя как синхронный. Это упрощает обработку ошибок и делает код более читаемым. Пример с обработкой ошибок: ```javascript async function fetchData() { try { const response = await fetch('https://api.example.com/data'); if (!response.ok) { throw new Error('Network response was not ok'); } const data = await response.json(); return data; } catch (error) { console.error('Error fetching data:', error); } } fetchData().then(data => { console.log(data); }); ``` ### Зачем это нужно 1. **Улучшение читаемости**: Асинхронный код с `async/await` выглядит более линейно и понятно, чем цепочки промисов с `.then()` и `.catch()`. 2. **Обработка ошибок**: `try/catch` блоки позволяют легко обрабатывать ошибки, возникающие в асинхронном коде. 3. **Упрощение управления потоком выполнения**: `await` приостанавливает выполнение функции до завершения промиса, что упрощает логику управления асинхронными операциями. Использование `async/await` значительно улучшает качество и поддерживаемость асинхронного кода в JavaScript.