Skip to main content

Що робить once()?

1. Що робить once()

Метод .once(eventName, listener) реєструє обробник події, який виконається лише один раз, а потім автоматично видалиться.

Після першого виклику події - слухач більше не буде викликатися, навіть якщо подія з тим самим іменем відбудеться знову.

Приклад:

javascript
const EventEmitter = require('events'); const emitter = new EventEmitter(); emitter.once('connect', () => { console.log('З'єднання встановлено!'); }); emitter.emit('connect'); // спрацює emitter.emit('connect'); // більше не спрацює

Вивід:

javascript
З'єднання встановлено!

2. Що робить on()

Метод .on(eventName, listener) реєструє постійний обробник події. Він буде викликатися щоразу, коли подія генерується.

Приклад:

javascript
emitter.on('data', () => { console.log('Отримано дані'); }); emitter.emit('data'); // спрацює emitter.emit('data'); // знову спрацює

Вивід:

javascript
Отримано дані Отримано дані

3. Головна відмінність між once() і on()

Характеристикаon()once()
Кількість спрацьовуваньНеобмежено (щоразу при emit())Лише один раз
Чи потрібно вручну видаляти слухачаТак, за потреби (off())Ні, видаляється автоматично
Типові випадки використанняПовторювані події (наприклад, data, message)Одноразові події (connect, ready, close, finish)
Вплив на пам'ятьСлухач залишаєтьсяСлухач видаляється після виклику

4. Чому once() корисний

  1. Уникає витоків пам'яті - слухач видаляється автоматично.
  2. Зручний для ініціалізацій - наприклад, подія ready у сервера чи open у потоку.
  3. Спрощує логіку - не потрібно вручну викликати .off().

5. Приклад з реальної практики

Наприклад, у HTTP-сервера:

javascript
const http = require('http'); const server = http.createServer(); server.once('listening', () => { console.log('Сервер запущено!'); }); server.listen(3000);

Подія 'listening' має відбутися один раз - тому .once() ідеально підходить.

Підсумок

on() - додає постійного слухача, який викликається щоразу при emit(). once() - додає одноразового слухача, який видаляється після першого виклику.

Рекомендується:

  • використовувати on() для повторюваних подій (data, message, update);
  • використовувати once() для одноразових подій (connect, ready, close, init).

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

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

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