Я использую Kefir.js для реактивного программирования, но у меня есть некоторые проблемы. У меня есть устройство с N датчиками (температура, давление, время, ...), и я думаю, было бы замечательно, если бы я представлял датчики как потоки. Так что я в конечном итоге с этим кодом:Начальные проблемы с реактивным программированием
function temperatureSensor(pin) {
let stream = Kefir.emitter()
if(pin > 12) {
stream.error(new Error(`Board has no pin ${pin}.`))
}
setInterval(() => {
stream.emit(readTemperature(pin))
}, 500)
return stream
}
Kefir.zip([
temperatureSensor(1),
temperatureSensor(42) // Invalid pin, should call .error
]).onValue((state) => {
// do something with sensor values
}).onError(() => {
console.error('An error occurred!')
})
Там находится несколько проблем с этим кодом:
.onError
никогда не будет называться (.onError
прилагается после.error
называется). Может использовать свойство вместо потока, но я не знаю, как ....zip
не является идеальным функция, мне нужно что-то вроде этого:
Синхронизировать датчики, называют .onValue, то .onValue каждый раз, когда значение датчика изменится
a: ----20------------21--------------
b: -------25--------------------24---
ab: --------•----------•----------•---
[20, 25] [21, 25] [21, 24]
Спасибо за любые советы.
Да, я думаю, что свойство было бы более подходящим для датчика, который измеряет непрерывное значение. – Bergi