Где невозможно обойтись без callback в Node.js и почему?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Callback остаются неотъемлемой частью Node.js в нескольких критических сценариях, несмотря на наличие Promise и async/await.
1. Event Emitters
Основной механизм Node.js - события, которые могут выпускаться многократно:
const stream = fs.createReadStream("file.txt");
stream.on("data", (chunk) => { console.log(chunk); });
stream.on("end", () => { console.log("Done"); });
Promise не подходит, потому что это одноразовое значение, а события повторяются.
2. Signal Handlers
Обработка системных сигналов требует callback:
process.on("SIGTERM", () => {
server.close(() => { process.exit(0); });
});
Это архитектурный паттерн, не асинхронная операция.
3. Встроенные API
Некоторые встроенные функции имеют только callback версию:
fs.watch("file.txt", (eventType, filename) => {
console.log(eventType, filename);
});
4. Higher-order Functions (Strategy Pattern)
Когда callback - это часть архитектуры:
function processArray(arr, transform, onComplete) {
const result = arr.map(transform);
onComplete(result);
}
processArray([1, 2, 3], x => x * 2, (result) => {
console.log(result);
});
Это не асинхронный код, а передача функции как стратегии.
5. Worker Threads Communication
const { Worker } = require("worker_threads");
const worker = new Worker("./worker.js");
worker.on("message", (result) => {
console.log(result);
});
Worker отправляет сообщения в фоне, await здесь застопит весь код.
6. Fire-and-Forget операции
server.on("request", (req, res) => {
// Запускаем операцию в фоне, не ждём её
processAsync().then(() => console.log("Done"));
res.send("Processing...");
});
Callback для event обработчиков - единственный способ.
7. Cluster Communication
if (cluster.isMaster) {
cluster.on("message", (worker, message) => {
console.log(`Worker: ${message}`);
});
}
Вывод
Callback невозможно избежать потому что:
- Event-driven архитектура Node.js
- Promise = одноразовое значение, события = поток значений
- Системный API (сигналы, процессы) использует callback
- Архитектурные паттерны (Observer, Strategy) требуют callback
Современный код смешивает callback (для событий) и async/await (для операций).