如何在观察者外部检索传递给Rxjs Observable的next的最后一个值

问题描述

我有一个具有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来存储服务器数据。