我正在从api中获取数据(在服务文件中),并且正在ts文件中进行订阅。我没有使用rxjs(observable和subscription)。关于是否需要取消订阅我们感到困惑在angular 7中使用rxjs。如果需要退订,那么如果不使用rxjs怎么办
// ts
export class ViewDataComponent implements OnInit {
regions: Region[];
dataSource: MatTableDataSource<PaginatedMapData>;
constructor(private ApiServiceObj: ApiService ) {}
ngOnInit() {
this.ApiServiceObj.getLocationData().subscribe((res) => {
this.regions = res;
console.log(res);
});
this.ApiServiceObj.getMarkerDataForTableView(this.startdate, this.enddate, this.regionOption, 0, 10)
.subscribe((res) => {
this.dataSource = new MatTableDataSource(res['results']);
});
}
}
答案 0 :(得分:0)
当您调用unsubscribe方法时,订阅结束,但是当可观察的完成或错误发生时,订阅也会自动发生:
通常将符合Observer接口的对象提供给observable.subscribe(observer)方法,Observable将调用Observer的next(value)方法来提供通知。行为良好的Observable会调用一次Observer的complete()方法,或者恰好一次调用Observer的error(err)方法,作为最后发出的通知。
来源: http://reactivex.io/rxjs/class/es6/MiscJSDoc.js~ObserverDoc.html
当您使用的此api服务始终执行常规的http调用时,您可以确定返回的那些Observable始终会在调用完成后立即进入完成状态或错误状态。因此,实际上,在这种情况下您可以不取消订阅而逃脱。当您实际开始使用rxjs并开始使用主题等时……最佳实践是使用“ takeUntil”方法来确保清除所有订阅。
有关takeUntil方法的更多信息: https://blog.angularindepth.com/rxjs-avoiding-takeuntil-leaks-fb5182d047ef
简短摘要:我个人喜欢使用rxjs和反应式编程,但是我了解它并不适合所有人。 Angular会强制您在进行http调用时使用它。如果您和您的团队由于增加了复杂性而决定不使用rxjs,那么您可以不必取消订阅从httpclient返回的可观察对象。
但是,您-应该-至少理解为什么在这种情况下不必要。只需在可观察对象上添加一个运算符就足以引入泄漏订阅...
如果您不想相信我的话: https://gitter.im/angular/angular?at=5681e8fa3c68940269251fa5