RxJs:如何在收到流时“监听”订阅的更改?

时间:2016-09-13 00:36:56

标签: javascript angular rxjs observable angular2-http

我是Angular 2和Observables的新手,但是当我收到一个流时,我还没有找到一种“监听”订阅更改的方法,我甚至不知道这是否可行或是否是正确的方式。

这就是我以前对承诺所做的事情:

// Constructor and more code
// ...

ngOnInit(): void {
  this.loading.present();

  this.getItems()
      .then(() => this.loading.dismiss());
}

getItems(): Promise {
  return this.itemService
    .getItems()
    .then(items => this.items = items);
}

refresh(refresher): void {
  this.getItems()
      .then(() => refresher.complete());
}

我已经尝试了订阅/观察,但我不知道如何:

// Constructor and more code
// ...

ngOnInit(): void {
  this.loading.present();

  this.getItems()
      .subscribe(() => this.loading.dismiss());
}

getItems(): Subscription {
  return this.itemService
    .getItems()
    .subscribe(items => this.items = items);
}

refresh(refresher): void {
  this.getItems()
      .subscribe(() => refresher.complete());
}

当然,我收到编译错误:Property 'subscribe' does not exist on type 'Subscription',有关如何使用Observables(RxJS)实现此目的的任何帮助吗?

1 个答案:

答案 0 :(得分:3)

Subscription是一个听众,你不能听一个听众,对吗?

相反,您需要返回Observable才能订阅。将您的功能更改为以下(未测试):

getItems(): Observable<any> {
  let obs = this.itemService.getItems().share();
  obs.subscribe(items => this.items = items);
  return obs;
}