我已经实现了一个简单的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

虽然我期望值(value)
false
true
false

我的实现有什么问题?

最佳答案

您得到的输出是正确的:

this.val();

由于if (res) {...},这仅使第一个订阅不打印任何内容。
this.changeSt(true);

将值设置为true,该值由第一个订阅打印。
this.val();

进行第二个订阅,打印第二个true
this.changeSt(false);

您将其设置为false,由于if (res) {...},所有订阅者都将其忽略。
this.val();

与上述相同。

关于javascript - 具有 bool 值的BehaviorSubject无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41951592/

10-11 19:59