event onchange dla custom class - NodeJS

0

Potrzebuje biblioteki dla NodeJS, która udostępnia lub pozwoli na stworzenie czegoś na wzór eventu onchange.

Wartość mainTag.value ma być stale monitorowana. Aktualną wartość tej zmiennej jest sprawdzana przez wywołanie metody read() z innej biblioteki tj.
mainTag.value = opc.tag.read();

Gdy zmieni się wartość zmiennej ma zostać wykonany określony kod (np. zapis pozostałych wartości do bazy).

Oczywiście mógłbym to zrobić w zwykłym trywialnym while(true) i póżniej read i sleep ale nie jest to eleganckie.

Polecicie coś?

0

setInterval? lub ogromniaste RXJs distinctUntilChange

0

Tworzenie własnych eventów masz przecież w bibliotece standardowej: https://nodejs.org/api/events.html

Przykład:

// Stwórz emitter i go wyeksportuj
const EventEmitter = require('events')

const tagEmitter = new EventEmitter()
  .on('mainTagChanged', (newValue) => {
    console.log(`Main tag changed, new value: ${newValue}`)
  })



// przy zmianie wartości wywołuj ten event (u Ciebie pewnie to będzie w setterze):
let tag = 'elo'

tag = 'yo'
tagEmitter.emit('mainTagChanged', tag)

PS
RX lub coś lżejszego (np https://github.com/getify/asynquence ) to ogólnie świetne rozwiązanie, jeśli masz sporo takiej logiki.

0

Genereralnie logiki tego typu nie będzie dużo. Chcę tylko by to było na osobnym wątku.
W skrócie funkcionalność ma być taka:
a) gdy wywołana zostanie funkcja start to na osobnym wątku wykouj w nieskonczoność z jakimś interwałem sekwencja czynnosci:

  • sprawdź wartość zmiennej jak się zmieniła ustaw lock i odczytaj pozostałe parametry i zapisz ich wartość w bazie. zwolnij lock. Powtórz.** setInterval() w połączeniu z Emiterrem wystarczy, czy lepiej cos innego co proponujecie?**
    b) wywołanie w głównym funkcji stop zatrzyma sprawdzanie zmiennej i zakonczy wątek. Tutaj chyba child_process z NodeJs wystarczy?
0

Po co Ci tam setInterval? I po co osobny wątek? Po co lock? Btw process != wątek, Node.js działa w jednym watku.

0
Maciej Cąderek napisał(a):

Po co Ci tam setInterval? I po co osobny wątek? Po co lock? Btw process != wątek, Node.js działa w jednym watku.

Z tego co zrozumiałem to ```
tagEmitter.emit('mainTagChanged', tag)

A osobny wątek jest potrzebny po to bym mógł rozpocząć i zatrzymać loop.

1 użytkowników online, w tym zalogowanych: 0, gości: 1