Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Зачем нужен async/await?
async/await — это синтаксический сахар для работы с промисами, который делает асинхронный код похожим на синхронный. Это одна из самых важных фич современного JavaScript/Node.js.
Проблемы, которые решает async/await
Callback Hell (адский ад колбэков):
// Без async/await - адский ад вложенности
fs.readFile("file1.txt", (err, data1) => {
if (err) throw err;
fs.readFile("file2.txt", (err, data2) => {
if (err) throw err;
fs.readFile("file3.txt", (err, data3) => {
if (err) throw err;
console.log(data1, data2, data3);
});
});
});
С async/await — чистый и понятный код:
async function readFiles() {
try {
const data1 = await fs.promises.readFile("file1.txt");
const data2 = await fs.promises.readFile("file2.txt");
const data3 = await fs.promises.readFile("file3.txt");
console.log(data1, data2, data3);
} catch (err) {
throw err;
}
}
Основные преимущества
- Читаемость — код выглядит синхронным, его легче понять и поддерживать
- Обработка ошибок — используем стандартный try/catch, не нужны .catch() цепочки
- Отладка — стэк трейс содержит реальное место ошибки, а не только последний промис
- Контроль потока — легко использовать if/else, for, while в асинхронном коде
Как это работает
async функция автоматически возвращает промис:
async function getData() {
return 42; // вернёт Promise.resolve(42)
}
getData().then(result => console.log(result)); // 42
await приостанавливает выполнение функции:
async function main() {
console.log("старт");
const result = await Promise.resolve(42); // ждём результат
console.log("результат:", result); // это выполнится только после результата
console.log("конец");
}
main();
// Вывод: старт → (пауза) → результат: 42 → конец
Параллельное выполнение
Неправильно — медленно:
async function slow() {
const r1 = await fetch("/api/1"); // ждём 1сек
const r2 = await fetch("/api/2"); // ждём ещё 1сек
return [r1, r2]; // всего 2сек
}
Правильно — быстро:
async function fast() {
const [r1, r2] = await Promise.all([
fetch("/api/1"),
fetch("/api/2")
]); // оба запроса параллельно, всего ~1сек
return [r1, r2];
}
Обработка ошибок
async function example() {
try {
const result = await someAsyncOperation();
return result;
} catch (err) {
console.error("Ошибка:", err.message);
// обработка ошибки
} finally {
// выполнится в любом случае
}
}
Реальный пример в Express
app.get("/users/:id", async (req, res) => {
try {
const user = await db.query("SELECT * FROM users WHERE id = ?", [req.params.id]);
if (!user) return res.status(404).json({ error: "Not found" });
res.json(user);
} catch (err) {
res.status(500).json({ error: err.message });
}
});
Заключение: async/await сделал JavaScript асинхронный код понятнее и безопаснее. Это стандарт современной разработки на Node.js.