【发布时间】:2020-03-12 06:16:11
【问题描述】:
--Component.ts--
getGenCoreLabs() {
this.checkinService
.getLaboratories()
.pipe(
switchMap(outerResp => {
const total = outerResp.headers.get(outerResp.headers.get('total'));
return this.checkinService.getGenCoreLabs(total);
}),
take(1)
)
.subscribe(resp => {
this.apiResponse = resp;
this.areaList = this.apiResponse.map(labName => {
return labName.Name;
});
this.areaListIds = this.apiResponse.map(labGuid => {
return labGuid.Guid;
});
});
}
在我的 component.ts 文件中的上述代码中,单次 take(1) 是否足以取消订阅相关的 http 服务?或者我是否也必须在 service.ts 文件中的第二个服务(getGenCoreLabs)中调用 take(1) ? (请参阅下面的代码以供参考)
--Service.ts--
public getGenCoreLabs(total: number): Observable<CoreLaboratoryData> {
const url = `/core/laboratories?per-page=${total}`;
return this.httpService.get(url).pipe(take(1));
}
【问题讨论】:
-
您不需要显式取消订阅 http 订阅,因为它们只发出一次然后完成或出错。在这两种情况下,您都不需要取消订阅
take(1) -
你能再解释一下吗? @Picci
-
不久前我对此做了深入的回答stackoverflow.com/a/60466443/5367916