假设我在提供程序中有一个这样的函数:
getAll(): Observable<CarModel[]> {
return this.http.get<CarModel[]>(this.carUrl);
}
在一个组件中,我有一个函数使用提供者的这个函数:
getCars() {
const that = this;
this.carService.getAll().subscribe(function(cars) {
that.factoryService.setCars(cars);
this.unsubscribe();
});
}
可以用使用采取
运算符的函数替换它以避免调用取消订阅()
吗?
getCars() {
const that = this;
this.carService.getAll().take(1).subscribe(function(cars) {
that.factoryService.setCars(cars);
});
}
我想知道当与Angular的Httpclient方法一起使用时,这是否会有任何意外或不需要的行为?我从未见过Angular的Httpclient这样使用-这就是我问的原因。
HttpClient在请求完成后调用流上的完成
。调用完成的可观察信号表示不会发出更多值,因此任何订阅者都不会收到更多值。这意味着没有理由取消订阅或在超文本传输协议请求中使用采取
。
getAll(): Observable<CarModel[]> {
return this.http.get<CarModel[]>(this.carUrl); // <- Emits once and completes
}
从文档中查看此部分。注意:
来自HttpClient的可观察对象总是发出一个值,然后完成,永远不会再次发出。
作为你,我以前从未见过这样的。
我曾经将所有超文本传输协议请求转换为Promise:
在MDN站点中,您可以找到以下内容:Promise对象表示异步操作的最终完成(或失败)及其结果值。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise
this.carService.getAll()
.toPromise()
.then((cars) => {
that.factoryService.setCars(cars);
}).catch((error) => {
console.error(error);
});