Работая в Node.js, я хочу добавить прослушиватель ".onChange ()" к одной из моих числовых переменных c, которая асинхронно обновляется внешним подключением WebSocket. Конечно, я мог бы вызвать специфическую c функцию в WebSocket, обрабатывающую обратный вызов напрямую, но ради простоты кода (говорят они, KISS) мне было интересно, могу ли я создать слушатель «onChange», как в frontend javascript .
Вот идея:
var x = 1.732;
x.onChange( myAsyncCallbackFunction );
// WebSocket changes the value of x ====> myAsyncCallbackFunction is triggered
Прежде всего, является ли моя идея правильной практикой или мне следует избегать ее реализации?
И затем, могу ли я достичь это поведение без какого-либо грязного "nextTick" или "setInterval"? Хотя я думаю, что все сводится к этому.
Любой ответ или ссылка на хороший учебник / документацию будут высоко оценены!
[РЕДАКТИРОВАТЬ 1: Все еще застрял после первого исследования ниже ...]
Пытаясь понять источники / слушатели событий, я прочитал это руководство и написал приведенный ниже код, который отлично работает:
var events = require('events');
var eventEmitter = new events.EventEmitter();
var x = 1.732;
const onChangeX = () => console.log('x just changed !');
eventEmitter.addListener('xChange', onChangeX);
setInterval(() => {
eventEmitter.emit('xChange');
},2000);
// logs 'x just changed !' every 2 seconds
Теперь я могу уточнить мой вопрос: генерируется ли встроенное событие каждый раз, когда моя переменная цифра c обновляется? Это позволило бы мне избегать вызова onChangeX () везде, где это изменилось в моем коде.
Или я должен сам генерировать событие в коде всякий раз, когда я изменяю x? Если это так, все вышеперечисленное бесполезно, так как я могу напрямую вызывать onChangeX () в коде (болезненный вывод, если x изменяется многими различными асин c событиями).
[EDIT 2: обходной путь = вложение в объект + метод получения / установки]
Обходной путь может заключаться в том, чтобы вложить мою переменную цифра c в объект и использовать метод получения / установки, как в ответ на этот вопрос с голосованием , которые, я думаю, доступны в Node.js. Немного больно, и все равно требуется обновление везде, где я меняю x в своем коде. Любое более простое решение?