反应式编程的初学者问题
Beginner problems with reactive programming
我正在使用 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]
感谢您的任何建议。
有从函数中读取值的内置功能,Kefir.fromPoll
。
function temperatureSensor(pin) {
return Kefir.fromPoll(500, function() {
return readTemperature(pin)
}
}
对于错误处理,我只会使用标准的 javascript 错误功能,例如。抛出一个错误。你可以在创建流时知道引脚是否正确,因此不需要响应式编程。
您要查找的组合器函数是 combine
。完整的例子是:
function temperatureSensor(pin) {
if(pin > 12) {
throw new Error(`Board has no pin ${pin}.`)
}
return Kefir.fromPoll(500, function() {
return readTemperature(pin)
}
}
Kefir.combine([
temperatureSensor(1),
temperatureSensor(42)
]).onValue((state) => {
// do something with sensor values
}).onError(() => {
console.error('An error occurred!')
})
我正在使用 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]
感谢您的任何建议。
有从函数中读取值的内置功能,Kefir.fromPoll
。
function temperatureSensor(pin) {
return Kefir.fromPoll(500, function() {
return readTemperature(pin)
}
}
对于错误处理,我只会使用标准的 javascript 错误功能,例如。抛出一个错误。你可以在创建流时知道引脚是否正确,因此不需要响应式编程。
您要查找的组合器函数是 combine
。完整的例子是:
function temperatureSensor(pin) {
if(pin > 12) {
throw new Error(`Board has no pin ${pin}.`)
}
return Kefir.fromPoll(500, function() {
return readTemperature(pin)
}
}
Kefir.combine([
temperatureSensor(1),
temperatureSensor(42)
]).onValue((state) => {
// do something with sensor values
}).onError(() => {
console.error('An error occurred!')
})