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.