--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 请求就是这种情况,它只会发出一个值。
与 timer(1000)
的情况相同,仅在 1000 毫秒后发出一个值。
有关您应该取消订阅或不需要取消订阅的不同情况的更多详细信息,请查看When to Unsubscribe in Angular作者:Netanel Basal。
所以你的代码可能是:
getGenCoreLabs() {
this.checkinService.getLaboratories().pipe(
switchMap(outerResp => {
const total = outerResp.headers.get(outerResp.headers.get('total'));
return this.checkinService.getGenCoreLabs(total);
}),
).subscribe(resp => {
...
})
}
关于Angular/RxJs - 使用 take(1) 取消订阅依赖的 http 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60648549/