Mar*_*rty 6 javascript rxjs subject-observer behaviorsubject angular
我实现了一个简单的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();
}
}
Run Code Online (Sandbox Code Playgroud)
现在运行时stStatus()会在控制台上记录以下输出.
true
true
Run Code Online (Sandbox Code Playgroud)
虽然我期待价值
false
true
false
Run Code Online (Sandbox Code Playgroud)
我的实施有什么问题?
你得到的输出是正确的:
this.val();
Run Code Online (Sandbox Code Playgroud)
这只是第一次订阅,由于没有打印任何东西if (res) {...}.
this.changeSt(true);
Run Code Online (Sandbox Code Playgroud)
设置true第一个订阅打印的值.
this.val();
Run Code Online (Sandbox Code Playgroud)
使第二个订阅打印第二个true.
this.changeSt(false);
Run Code Online (Sandbox Code Playgroud)
您将其设置false为由所有订户忽略的因素if (res) {...}.
this.val();
Run Code Online (Sandbox Code Playgroud)
与上述相同.
因为这些行:
if (res){
console.log(res);
}
Run Code Online (Sandbox Code Playgroud)
该值只有在为真时才会被记录。
顺便说一句,您误解了代码的工作方式。
| 归档时间: |
|
| 查看次数: |
4233 次 |
| 最近记录: |