我想知道取消订阅HTTP服务上的帖子/放置/补丁/删除的最佳方法是什么
例如,给定此方法,在页面中调用以保存对象:
public add(obj) {
const sub = this.service.post('/path/to/resource', obj).subscribe(()=>{
console.log('saved');
sub.unsubscribe();
});
}
我需要取消订阅吗?我是否正确取消了订阅?
已更新: 请注意,此添加方法将被多次调用!
更新2: 是的,它是HttpClient服务
答案 0 :(得分:1)
以下内容可以正常工作,并且不会泄漏订阅:
public add(obj) {
this.service.post('/path/to/resource', obj)
.subscribe(() => {
console.log('saved');
});
}
由Observable
方法返回的HttpClient
的任何订阅都将自动取消订阅。此处无需进行任何显式的订阅管理。
答案 1 :(得分:0)
我需要取消订阅
是的,如果您的页面有多个HTTP调用,并且您想要取消订阅路由/页面更改等方面的所有调用,那么您需要取消订阅所有调用。
我是否正确取消了订阅
否,您在调用后立即取消订阅HTTP呼叫,取消订阅HTTP呼叫的最佳位置是ngOnDestroy
组件的生命周期挂钩
有角度的。像这样-
ngOnDestroy(){
sub.unsubscribe();
}
答案 2 :(得分:0)
使用ngOnDestroy生命周期 const sub;
public add(obj) {
sub = this.service.post('/path/to/resource', obj).subscribe(()=>{
console.log('saved');
sub.unsubscribe();
});
}
ngOnDestroy() {
sub.unsubscribe();
}
如果您有多个可观察的订阅对象,那么我建议使用和订阅数组,然后销毁它。
private subscriptions: Subscription[] = [];
public add(obj) {
subscriptions.push(this.service.post('/path/to/resource', obj).subscribe(()=>
{
console.log('saved');
sub.unsubscribe();
}));
}
ngOnDestroy() {
this.subscriptions.forEach(subscription => {
subscription.unsubscribe();
});
}
答案 3 :(得分:0)
不一定要退订,但最好的方法是退订以防止内存泄漏。
要做点什么:
add(obj){
this.sub = this.service.post('/path/to/resource', obj).subscribe(()=>{
console.log('saved');
});
}
ngOnDestroy() {
this.sub.unsubscribe()
}