订阅http observable时运行一些东西

时间:2017-03-08 12:51:56

标签: http angular typescript rxjs observable

我有一个从API返回一些数据的服务:

// ...

getMetadata() {
    this.spinner.start();
    return this.http.get('/api/metadata').finally(() => this.spinner.stop());
}

// ....

我想将变量中存储的observable存储起来供以后使用,所以在我的组件中我去了:

// ...
this.metadata$ = this.api.getMetadata();
// ...

让我说我正在使用| async在我的模板中的某个地方使用这个observable,但是让我们说这不会马上发生。 发生的事情是,无论如何,即使订阅根本没有出现,我的微调器也会立即显示出来。

所以我的问题是,有没有一种方法可以定义一个observable,它会在第一次订阅时调用一个函数,就像finally运算符一样,但是当observable是第一个(或者每个订阅了吗?

提前致谢!

2 个答案:

答案 0 :(得分:0)

 constructor(private _service:YourService) {}
 ngOnInit() {
   this._service.getMetadata().subscribe(
      (items)=>{
        this.metadata$=items,console.log(groups)
      },
      err => console.log(err)
    );
}

答案 1 :(得分:0)

你可以尝试:

getMetadata() {

    return Observable.of(this.spinner.start()).
          flatMap(()=> this.http.get('/api/metadata')).
          finally(() => this.spinner.stop());
}

使用微调器启动Observable,然后使用flatMap发送请求,最后关闭微调器。