Как добавить слушателя onChange в переменную нумерации c в Node.js? - PullRequest
0 голосов
/ 27 апреля 2020

Работая в 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 в своем коде. Любое более простое решение?

...