【发布时间】:2020-03-29 00:39:12
【问题描述】:
在我们的 Angular 组件上使用 ngOnDestroy() 方法,如果在离开页面时它们仍然处于未决状态,我们会取消 http 请求。在某些页面上,我们使用自定义的通用缓存帮助器来防止重新加载已经加载的数据。
import { HttpClient } from "@angular/common/http";
import { Injectable } from "@angular/core";
import { AsyncSubject } from "rxjs";
@Injectable()
export class HttpCacheHelper {
public cache = new Map<string, AsyncSubject<any>>();
public constructor(private readonly http: HttpClient) {
}
public get<T>(url: string): AsyncSubject<T> {
if (!this.cache.has(url)) {
const subject = new AsyncSubject<T>();
this.cache.set(url, subject);
this.http.get(url)
.subscribe((data:any) => {
subject.next(data as T);
subject.complete();
});
}
return this.cache.get(url);
}
}
如果我取消订阅 AsyncSubject,我的 http 调用(当然)不会取消。如何做到这一点?
【问题讨论】:
-
你不能只使用共享操作符:http.get
().pipe(share())? -
您应该考虑选择一个接受的答案,以帮助可能看到此帖子的其他人
标签: angular typescript rxjs observable