event onchange dla custom class - NodeJS

event onchange dla custom class - NodeJS
LA
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 lat
  • Postów:10
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ś?

SZ
  • Rejestracja:prawie 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:616
0

setInterval? lub ogromniaste RXJs distinctUntilChange

edytowany 2x, ostatnio: Szczery
Maciej Cąderek
Maciej Cąderek
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Warszawa
  • Postów:1264
0

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

Przykład:

Kopiuj
// 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.

edytowany 2x, ostatnio: Maciej Cąderek
NE
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 3 lata
  • Postów:77
0
LA
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 lat
  • Postów:10
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?
edytowany 1x, ostatnio: lamek
Maciej Cąderek
Maciej Cąderek
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 3 lata
  • Lokalizacja:Warszawa
  • Postów:1264
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.

edytowany 2x, ostatnio: Maciej Cąderek
LA
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 7 lat
  • Postów:10
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)

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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.