7

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

我的实施有什么问题?

4

2 回答 2

5

你得到的输出是正确的:

this.val();

这只是进行第一个不打印任何内容的订阅,这要归功于if (res) {...}.

this.changeSt(true);

Settrue是第一个订阅打印的值。

this.val();

进行第二个订阅,打印第二个true.

this.changeSt(false);

您将其设置为false所有订阅者都忽略它,因为if (res) {...}.

this.val();

和上面一样。

于 2017-01-31T07:19:55.807 回答
2

因为这些行:

if (res){
  console.log(res);
}

该值仅在真实时才被记录。

顺便说一句,您误解了代码的工作方式。

于 2017-01-31T07:15:15.773 回答