Angular2 需不需要取消对http.get的订阅?
初学Angular2和Rxjs,对Rxjs的函数式编程的了解还不是很清晰。在写angular2 http的demo
时遇到了一些疑惑。
service.ts
Login(username: string, password: string): Observable<User> {
return this.http.request(environment.apiUrl + '/Login', {
method: RequestMethod.Post,
responseType: ResponseContentType.Json,
body: {
username: username,
password: password,
}
})
.map(response => response.json() as User)
}
login.component.ts
onLoginBtnClick() {
const subscription = this.loginService.Login('admin', 'admin')
.subscribe(user => {
this.router.navigate(['/home']);
}, error => {
console.log(error);
});
}
上面的代码实现了一个简单的登录请求。Login方法返回一个Observable对象,调用subscribe方式执行请求。在订阅类似按钮点击事件时,为了防止内存泄露,需要在页面销毁前取消订阅。 我不明白的是,这样实现的http请求的subscription需不需要在页面销毁前取消订阅,为什么?还有哪些这样的订阅需要取消或者不需要取消,希望有人能给我讲讲,给个链接也行。多谢!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
这个不需要。
常用的场景可以看这篇文章:https://segmentfault.com/a/11...
angular
的http
服务所返回的Observable
,会在获取到数据或者出错后自动关闭,不需要手动去关闭它。Observable 的实例有多种,只有在实例没有结束之前,希望取消订阅,才需要处理取消订阅的问题。
对于 Angular 中的 Http 来说,它只能 emit 一次,在请求完成之后,就自动 complete 了。所以,不用取消注册。
有人帮你取消的就不需要,如async管道,angular框架会帮你取消,流上发出了complete通知的,rxjs会帮你取消。
不需要取消。。。