1. Асинхронное программирование позволяет выполнять операции, требующие ожидания, без блокировки всего интерфейса браузера. Например, загрузка данных с сервера может занимать некоторое время. Promise — объект, представляющий будущий результат асинхронной операции. Он может находиться в состоянии ожидания, успешного выполнения или отклонения с ошибкой.

 

2. Ключевое слово async используется для объявления асинхронной функции, которая всегда возвращает Promise. Ключевое слово await приостанавливает выполнение данной функции до завершения ожидаемого Promise. При этом весь интерфейс браузера не блокируется. Использование async/await позволяет записывать асинхронный код последовательно и делает его более понятным.

 

3. Fetch API предназначен для выполнения сетевых HTTP-запросов из JavaScript. Метод fetch() принимает адрес ресурса и необязательные параметры запроса, после чего возвращает Promise с объектом Response. Для получения JSON-данных используется метод response.json(). При отправке JSON обычно устанавливается заголовок Content-Type: application/json.

 

4. Fetch API обычно не отклоняет Promise только из-за HTTP-ошибок, например 404 или 500. Поэтому необходимо проверять свойство response.ok, которое показывает успешность HTTP-ответа. Сетевые ошибки, исключения при обработке данных и ошибки разбора JSON можно обрабатывать с помощью try/catch. Это позволяет сообщить пользователю о проблеме и предусмотреть повторную попытку.

 

5. Состояния загрузки помогают пользователю понимать, что происходит во время асинхронной операции. Интерфейс может отображать сообщение об ожидании, успешный результат или ошибку. Во время отправки данных иногда необходимо временно отключать кнопку, чтобы избежать повторных запросов. Promise.all() позволяет одновременно ожидать несколько независимых асинхронных операций. При работе с большим количеством запросов следует учитывать нагрузку на сервер и возможность отмены операций через AbortController.