Angular 角度,rxjs:HTTP可观察,取决于经过身份验证的用户
我有一个HTTP端点,我想在应用程序组件中获取它Angular 角度,rxjs:HTTP可观察,取决于经过身份验证的用户,angular,rxjs,observable,Angular,Rxjs,Observable,我有一个HTTP端点,我想在应用程序组件中获取它 export class ExampleService { public summary$: Observable<any>; constructor(private http: HttpClient) { this.summary$ = this.http.get<any>('/api/summary'); } } 导出类示例服务{ 公开摘要$:可见; 构造函数(专用http:
export class ExampleService {
public summary$: Observable<any>;
constructor(private http: HttpClient) {
this.summary$ = this.http.get<any>('/api/summary');
}
}
导出类示例服务{
公开摘要$:可见;
构造函数(专用http:HttpClient){
this.summary$=this.http.get('/api/summary');
}
}
但该查询的结果取决于当前经过身份验证的用户。
因此,我使用用户$对HTTP进行管道传输:
export class ExampleService {
public summary$: Observable<any>;
constructor(private http: HttpClient, private auth: AuthService) {
this.summary$ = this.auth.user$.pipe(
switchMap(user => {
console.log('New user');
if (!user) {
return of(null);
}
return this.http.get<any>('/api/summary');
})
);
}
}
导出类示例服务{
公开摘要$:可见;
构造函数(私有http:HttpClient,私有auth:AuthService){
this.summary$=this.auth.user$.pipe(
开关映射(用户=>{
console.log(“新用户”);
如果(!用户){
返回(空);
}
返回这个.http.get('/api/summary');
})
);
}
}
其中此.auth.user$
是当前用户的ReplaySubject(1)
问题是:当summary$的订阅者下降到零并再次上升(在导航过程中)时,HTTP请求在控制台中用“新用户”再次调用
根据用户的不同,缓存HTTP请求的真正方法是什么
此外,还需要“在第一个订户之前不要发送请求”谢谢您的评论。通过
shareReplay
解决
export class ExampleService {
public summary$: Observable<any>;
constructor(private http: HttpClient, private auth: AuthService) {
this.summary$ = this.auth.user$.pipe(
switchMap(user => {
if (!user) {
return of(null);
}
return this.http.get<any>('/api/summary');
}),
shareReplay(1)
);
}
}
导出类示例服务{
公开摘要$:可见;
构造函数(私有http:HttpClient,私有auth:AuthService){
this.summary$=this.auth.user$.pipe(
开关映射(用户=>{
如果(!用户){
返回(空);
}
返回这个.http.get('/api/summary');
}),
共享重播(1)
);
}
}
ReplaySubject(1)
保留其内部内容,无论有多少订户。并将该值提供给每个新订阅者,强制HTTP请求而不是replaySubject。您应该使用shareReplay操作符来尝试,这将缓存第一次HTTP调用后的结果