当我们不在angular 7中使用rxjs时是否需要退订

时间:2019-08-06 12:59:00

标签: rxjs angular7

我正在从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']);


      });
    }
}

1 个答案:

答案 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