我有一个从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是第一个(或者每个订阅了吗?
提前致谢!
答案 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发送请求,最后关闭微调器。