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

Oma*_*mar 0 rxjs angular

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

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

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

this.myService.getProductById(id).subscribe(product => this.product = product);
Run Code Online (Sandbox Code Playgroud)

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

this.myService.getProductById(id).once(product => this.product = product);
Run Code Online (Sandbox Code Playgroud)

Wil*_*han 5

RXJS 5-6的方式是

this.myService.getProductById(id).pipe(
 first()
).subscribe(product => this.product = product);
Run Code Online (Sandbox Code Playgroud)

要么

this.myService.getProductById(id).pipe(
 take(1)
).subscribe(product => this.product = product);
Run Code Online (Sandbox Code Playgroud)

但这无济于事,因为HttpClient.get()返回一个自我完成的可观察对象(发出一次并完成),订阅回调只会运行一次,因此它是不需要的。因此,这根本不会改变行为。

如果您愿意,也可以

this.myService.getProductById(id).toPromise().then(product => this.product = product);
Run Code Online (Sandbox Code Playgroud)

要么

this.product = await this.myService.getProductById(id).toPromise();
Run Code Online (Sandbox Code Playgroud)