Примеры асинхронных функций
Асинхронное программирование — это подход, который позволяет выполнять операции без блокировки основного потока выполнения, что особенно полезно в веб-разработке. В 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
для гарантированного закрытия подключения к базе данных.
Заключение
Асинхронные функции — мощный инструмент в арсенале фронтенд-разработчиков. Они упрощают работу с асинхронными операциями и делают код более читаемым. Используйте асинхронные функции в своем коде, чтобы улучшить отзывчивость ваших приложений и упростить обработку ошибок.