问题描述
我有一个具有30多个可观察属性的类。到目前为止,我的服务器每次收到包含这30个属性的有效负载时,都会为实例的所有相应属性调用next()
方法。
问题在于,有时我必须检查属性的值,该值超出了订阅该可观察属性的观察者的范围。
我想到的是,我必须对所有事物都具有重复的属性,一个是可观察的,另一个是有状态的属性,以保存到达的值以供以后使用。
是否有某种方法可以避免这种情况,例如:Observable.getCurrentValue()
?
根据要求,提供一些示例代码
class Example {
public subjects = {
a1: new Subject<any>(),a2: new Subject<any>(),a3: new Subject<any>(),a4: new Subject<any>(),a5: new Subject<any>()
}
public treatPayload(data: any) {
for (const prop in data) {
if (data.hasOwnProperty(prop) && prop in this.subjects){
Reflect.get(this.subjects,prop).next(data[prop])
}
}
}
public test() {
const a1_observable = this.subjects.a1.asObservable()
const a2_observable = this.subjects.a2.asObservable()
const example_payload_1 = {
a1: "first",a2: "second",a10: "useless"
}
const example_payload_2 = {
a1: "first-second",a2: "second-second",a10: "useless-second"
}
a1_observable.subscribe((a1_new_value: any) => {
const i_also_want_the_last_value_emitted_by_a2 = a2_observable.last_value() // of course,this doesn't exist
console.log(a1_new_value)
console.log(i_also_want_the_last_value_emitted_by_a2)
})
this.treatPayload(example_payload_1)
this.treatPayload(example_payload_2)
}
}
因此,有没有一种方法可以在没有管道运算符的情况下检索i_also_want_the_last_value_emitted_by_a2
的正确值?我认为在a2_observable
的管道内释放订户可能使用的所有值将是一个问题。
解决方法
您可以使用BehaviorSubject.value
来存储服务器数据。