如何从可观察订阅中控制日志数据?

时间:2017-07-12 11:21:29

标签: angular typescript rxjs observable

我有一个简单的函数,包含在服务中,返回一个对象的可观察对象:

 private someData;

 getDataStream(): Observable<any> {
    return Observable.of(this.someData);
  }

我订阅了一个组件的onInit函数:

  private somethingsomething;

  ngOnInit() {
    this.dataService.getDataStream().subscribe(
      (data) => {
        this.somethingsomething = data; // WORKS AND ALWAYS UP TO DATE
        console.log(data); // ONLY WORKS ONCE
      }
    )
  }

如评论所示,给予变量的数据(随后显示在视图中)总是很好。但另一方面,console.log只触发一次,然后再也不会触发。

如果数据发生变化,我怎么能控制数据?

3 个答案:

答案 0 :(得分:0)

this.somethingsomething更改的原因是它具有someData的引用。 getDataStream方法只执行一次。但是,由于对象发生更改,具有该引用somethingsomething值的字段也会更改。这是因为Object在javascript中是可变的。

如果getDataStream从服务器返回响应,则情况并非如此。

答案 1 :(得分:0)

要将此数据记录到控制台,最好使用do运算符。每次从getDataStream observable推送新值时,do运算符将console.log该数据。

 private somethingsomething;

  ngOnInit() {
    this.dataService.getDataStream()
      .do(data => console.log(data))
      .subscribe((data) => {
        this.somethingsomething = data;
      }
    )
  }

答案 2 :(得分:0)

您可以使用以下代码。效果很好。

  ngOnInit() {
        this.dataService.getDataStream().subscribe(
        res => {
        this.somethingsomething = res ;
            console.log(res);
          });     
      }