Angular RXJS无需订阅即可获取数据

时间:2018-12-05 18:17:23

标签: angular rxjs

我在服务中具有此功能,可以从我的API中获取数据

getProductById(id) {
    return this.http.get<any>(piUrl + '/id', { params: id }).catch(this.errHandler);
}

我知道如何在组件中获取数据的唯一方法就是这样订阅。

this.myService.getProductById(id).subscribe(product => this.product = product);

但是一旦没有流,我只需要数据。我如何一次获取数据?像这样的东西。

this.myService.getProductById(id).once(product => this.product = product);

2 个答案:

答案 0 :(得分:4)

RXJS 5-6的方式应该是

this.myService.getProductById(id).pipe(
 first()
).subscribe(product => this.product = product);

this.myService.getProductById(id).pipe(
 take(1)
).subscribe(product => this.product = product);

但这不执行任何操作,并且不需要,因为HttpClient.get()返回了一个自我完成的可观察对象,该观察对象发出一次并完成,订阅回调只会运行一次。因此,这根本不会改变行为。

如果您愿意,也可以

this.myService.getProductById(id).toPromise().then(product => this.product = product);

this.product = await this.myService.getProductById(id).toPromise();

答案 1 :(得分:0)

使用Observable构造函数创建任何类型的可观察流。构造函数将可观察者的subscription()方法执行时运行的订阅者函数作为参数。订户函数接收一个Observer对象,并且可以将值发布到观察者的next()方法。 试试这个:

return new Observable(observer => {
  observer.next(this.value);
});