BehaviorSubject с логическим значением не работает должным образом
Я реализовал простой 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
Что не так с моей реализацией?
2 ответа
Вывод, который вы получаете, правильный:
this.val();
Это просто делает первую подписку, которая ничего не печатает благодаря if (res) {...}
,
this.changeSt(true);
Установите значение в true
который печатается по первой подписке.
this.val();
Делает вторую подписку, которая печатает вторую true
,
this.changeSt(false);
Вы установили его на false
который игнорируется всеми подписчиками из-за if (res) {...}
,
this.val();
Так же, как и выше.
Потому что эти строки:
if (res){
console.log(res);
}
значение только журнал, когда это действительно. Кстати, вы неправильно понимаете, как работает ваш код.