我有一个对api的通用http请求,但是首先我从ngrx存储中获取了apiUrl,这是可以观察到的,因此我可以将其应用于我的http请求url:
/**
* Get API wrapper
* @param endpoint The endpoint you want to call;
* @param params The params you want to pass in
*/
public get<T>(endpoint: string, params?: HttpParams): Observable<T> {
this.facade.getConfig.subscribe((config: AppConfig) => {
return this.authenticationService.GetToken().pipe(
map((jwt: string) => ({
headers: new HttpHeaders().set('Authorization', `Bearer ${jwt}`),
params: params
})),
mergeMap((options: { headers: HttpHeaders; params: HttpParams }) =>
this.http.get<T>(config.AppSettings.ApiUrl + endpoint, options)
)
);
});
return of();
}
如您所见,我将其余所需的代码包装在this.facade.getConfig.subscribe((config: AppConfig) => {
内。我可以像对标头和jwt令牌那样使用高阶可观察的运算符来简化此操作吗?
答案 0 :(得分:2)
这是您如何在一个级别上进行选择
public get<T>(endpoint: string, params ?: HttpParams): Observable < T > {
return this.facade.getConfig.pipe(
mergeMap((config: AppConfig) => this.authenticationService.GetToken())
map((jwt: string) => ({
headers: new HttpHeaders().set('Authorization', `Bearer ${jwt}`),
params: params
})),
mergeMap((options: { headers: HttpHeaders; params: HttpParams }) =>
this.http.get<T>(config.AppSettings.ApiUrl + endpoint, options)
)
);
}