Поиск по сайту
Ctrl + K
Вопросы по Node.js

Примеры асинхронных функций

Асинхронное программирование — это подход, который позволяет выполнять операции без блокировки основного потока выполнения, что особенно полезно в веб-разработке. В Node.js асинхронные функции часто используются для работы с операциями ввода-вывода, такими как запросы к базе данных или сетевые запросы.

Что такое асинхронные функции?

Асинхронные функции позволяют вам писать код, который работает с промисами более удобно. Вместо использования then() и catch(), вы можете использовать await для ожидания результата асинхронной операции. Такие функции имеют ключевое слово async перед списком параметров функции.

Пример использования асинхронных функций

Вот несколько примеров асинхронных функций на JavaScript с использованием Node.js.

Пример 1: Асинхронная функция с fetch

const fetch = require('node-fetch');

async function getData(url) {
    try {
        const response = await fetch(url);
        if (!response.ok) {
            throw new Error(`HTTP error! Status: ${response.status}`);
        }
        const data = await response.json();
        return data;
    } catch (error) {
        console.error('Ошибка при получении данных:', error);
    }
}

// Вызов функции
getData('https://api.example.com/data')
    .then(data => console.log(data))
    .catch(error => console.error(error));

В этом примере функция getData получает данные с указанного URL. Сначала мы ждем, пока fetch завершится, затем проверяем статус ответа. Если статус не ok, выбрасываем ошибку.

Пример 2: Асинхронная функция с таймером

function delay(ms) {
    return new Promise(resolve => setTimeout(resolve, ms));
}

async function asyncTimer() {
    console.log('Стартуем...');
    await delay(2000); // Ждем 2 секунды
    console.log('2 секунды прошли!');
}

// Вызов функции
asyncTimer();

В этом примере функция delay возвращает промис, который резолвится через заданное количество миллисекунд. В функции asyncTimer мы используем await, чтобы дождаться окончания времени перед тем, как выполнить следующий код.

Пример 3: Взаимодействие с базой данных

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

const {Client} = require('pg');

async function fetchUsers() {
    const client = new Client({
        connectionString: 'postgresql://localhost/mydatabase',
    });
    await client.connect();

    try {
        const res = await client.query('SELECT * FROM users');
        console.log(res.rows);
    } catch (err) {
        console.error('Ошибка при выполнении запроса:', err);
    } finally {
        await client.end();
    }
}

// Вызов функции
fetchUsers();

Здесь мы подключаемся к базе данных Postgres, выполняем запрос и выводим результат. Мы используем try...catch для обработки ошибок и finally для гарантированного закрытия подключения к базе данных.

Заключение

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