繁体   English   中英

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

[英]Angular RXJS get data without subscribing

我在一个服务中有这个功能来从我的 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);

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();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM