我实施了一个简单的BehaviorSubject
,
import {BehaviorSubject} from "rxjs";
class MyWeirdoClass {
constructor() {}
private st: Subject<boolean> = new BehaviorSubject<boolean>(null);
changeSt(val:boolean){
this.st.next(val);
}
val(){
this.st.subscribe(res=>{
if (res){
console.log(res);
}
})
}
stStatus() {
this.val();
this.changeSt(true);
this.val();
this.changeSt(false);
this.val();
}
}
现在,当运行stStatus()
时,会在控制台上记录以下输出。
true
true
虽然我期待值
false
true
false
我的实施有什么问题?
答案 0 :(得分:5)
您获得的输出是正确的:
this.val();
由于if (res) {...}
,这只会使第一个订阅无法打印任何内容。
this.changeSt(true);
将第一个订阅打印的值设置为true
。
this.val();
使第二个订阅打印第二个true
。
this.changeSt(false);
您将其设置为false
由于if (res) {...}
而被所有订阅者忽略。
this.val();
与上述相同。
答案 1 :(得分:2)
因为这些行:
if (res){
console.log(res);
}
只有在真实的情况下才会记录该值。
不过,你误解了代码的工作方式。