1. Использование Promise для асинхронной операции

 

Рассмотрим пример проверки готовности учебного материала. Программа имитирует ожидание ответа системы.

 

JavaScript-код:

 

function checkMaterial() {

    return new Promise((resolve) => {

        setTimeout(() => {

            resolve("Учебный материал готов");

        }, 2000);

    });

}

 

console.log("Начало проверки");

 

checkMaterial().then((result) => {

    console.log(result);

});

 

console.log("Проверка выполняется...");

 

Объяснение:

 

Promise — объект, представляющий будущий результат операции.

resolve() — сообщает об успешном завершении операции.

setTimeout() — выполняет функцию после заданной задержки.

then() — обрабатывает успешный результат Promise.

console.log() — выводит сообщение в консоль.

 

Результат:

 

Сначала выводятся сообщения:

 

Начало проверки

Проверка выполняется...

 

Примерно через две секунды появляется сообщение:

 

Учебный материал готов

 

Программа продолжает выполнять другие инструкции, не ожидая завершения асинхронной операции.

 

 

2. Получение данных с сервера с помощью Fetch API

 

Рассмотрим пример загрузки информации об учебных курсах с сервера университета.

 

JavaScript-код:

 

async function loadCourses() {

    try {

        const response = await fetch("/api/courses");

 

        if (!response.ok) {

            throw new Error("Ошибка HTTP: " + response.status);

        }

 

        const courses = await response.json();

 

        console.log("Список курсов:", courses);

    } catch (error) {

        console.log("Не удалось загрузить курсы:", error.message);

    }

}

 

loadCourses();

 

Объяснение:

 

async — объявляет асинхронную функцию.

await — ожидает завершения Promise внутри функции.

fetch() — отправляет HTTP-запрос.

response.ok — проверяет успешность HTTP-ответа.

response.json() — преобразует тело ответа из JSON.

try/catch — позволяет обрабатывать ошибки.

 

Результат:

 

Если сервер успешно отвечает на запрос, программа выводит полученный список курсов.

 

Если возникает сетевая ошибка или сервер возвращает неуспешный HTTP-статус, программа выводит сообщение об ошибке.

 

Для выполнения примера необходим работающий сервер с адресом /api/courses, возвращающий JSON.

 

 

3. Выполнение нескольких запросов одновременно

 

Рассмотрим пример одновременной загрузки расписания и списка преподавателей.

 

JavaScript-код:

 

async function loadUniversityData() {

    try {

        const [scheduleResponse, teachersResponse] =

            await Promise.all([

                fetch("/api/schedule"),

                fetch("/api/teachers")

            ]);

 

        if (!scheduleResponse.ok || !teachersResponse.ok) {

            throw new Error("Ошибка загрузки данных");

        }

 

        const [schedule, teachers] = await Promise.all([

            scheduleResponse.json(),

            teachersResponse.json()

        ]);

 

        console.log("Расписание:", schedule);

        console.log("Преподаватели:", teachers);

    } catch (error) {

        console.log(error.message);

    }

}

 

loadUniversityData();

 

Объяснение:

 

Promise.all() — ожидает завершения нескольких Promise.

fetch() — выполняет запрос к серверу.

response.json() — получает данные из JSON-ответа.

try/catch — обрабатывает возникающие исключения.

 

Результат:

 

Программа одновременно отправляет два запроса.

 

После успешного получения ответов в консоли отображаются расписание и список преподавателей.

 

Если один из запросов завершается сетевой ошибкой или сервер возвращает неуспешный HTTP-статус, программа сообщает об ошибке.

 

Для выполнения примера необходимы соответствующие серверные API.