Skip to main content

Що таке подія (event) у контексті Node.js?

1. Що таке подія в Node.js

Подія (event) - це сигнал про те, що щось відбулося (наприклад, прийшли дані, завершилося читання файлу, підключився клієнт тощо).

Node.js побудований навколо подієво-орієнтованої моделі (event-driven architecture), де код реагує на події, а не блокується в очікуванні їх завершення.

2. Механізм подій - EventEmitter

В основі лежить клас EventEmitter із модуля events. Він дозволяє об'єктам:

  • випромінювати події (emit);
  • слухати події (on).

Приклад:

javascript
const EventEmitter = require('events'); const emitter = new EventEmitter(); // Підписка на подію emitter.on('greet', (name) => { console.log(`Привіт, ${name}!`); }); // Генерація (emit) події emitter.emit('greet', 'Тім');

Тут:

  • 'greet' - це ім'я події,
  • on - слухач,
  • emit - генерація події,
  • викликається callback, переданий у .on().

3. Як це пов'язано з I/O

Node.js використовує події для всіх асинхронних операцій:

  • мережеві запити (http, net),
  • файлова система (fs),
  • потоки (streams),
  • таймери (setTimeout, setInterval).

Наприклад:

javascript
const fs = require('fs'); const stream = fs.createReadStream('file.txt'); stream.on('data', chunk => console.log('Отримано chunk')); stream.on('end', () => console.log('Файл прочитано'));

Тут:

  • потік генерує події (data, end, error),
  • і ти реагуєш на них, а не чекаєш синхронного завершення.

4. Роль Event Loop

Усі події обробляються через Event Loop - це "двигун", який:

  1. слухає чергу подій;
  2. викликає зареєстровані callback-и, коли подія відбувається;
  3. ніколи не блокується (усе неблокуюче).

Приклад життєвого циклу:

javascript
[Вхідні дані] → генерується подія → callback → обробка → наступний цикл

5. Де зустрічаються події

Об'єктТипові події
fs.ReadStreamdata, end, error, close
http.Serverrequest, connection, close
net.Socketconnect, data, end, error
processexit, uncaughtException, SIGINT
EventEmitterбудь-які користувацькі ('ready', 'updated' тощо)

6. Чому подієва модель ефективна

  • Асинхронність без блокувань: потік не чекає - події викликаються, коли готовий результат.
  • Висока масштабованість: можна обслуговувати тисячі з'єднань в одному потоці.
  • Проста логіка реакцій: замість циклу очікування - підписка на події.

Підсумок

Подія (event) у Node.js - це сповіщення про те, що відбулася певна дія.

Вона обробляється через механізм EventEmitter, а її виконання керується Event Loop.

Уся асинхронність Node.js - файлові операції, HTTP, потоки, таймери - будується на подієвій моделі, де код реагує на події, а не чекає їх завершення.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.