如何检索传递给观察者外部 Rxjs Observable 的 next() 的最后一个值
How to retrieve last value passed to next() of an Rxjs Observable outside the observer
我有一个 class 具有 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
,您可以在其中存储您的服务器数据。
我有一个 class 具有 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
,您可以在其中存储您的服务器数据。