使用 Rxjs 的不同 headers 的多个请求
Multiple requests with different headers with Rxjs
我有这个请求,虽然 hasProcessado == true
再执行 10 个请求并发出最后一个请求,如果它失败,再发出 3 个请求。
但是当我发出最后一个请求时,我需要用不同的方式通知后端 header
我的要求:
public getProfitability(): Observable<Profitability> {
let result = this.http.get<Profitability>(this.configService.generateNewUrl(`${environment.api.newEndpoints.profitability}`), {headers: this.configService.concatenateHeaders()})
return result
.pipe(
concatMap(res => iif(() => res.hasProcessed,
of(res),
interval(500).pipe(
take(10),
concatMap(() => result),
tap(result => console.log(result)),
)
)),
retryWhen(
error =>
error.pipe(
tap(() => console.log("error occurred getProfitability() ")),
delay(500),
take(3),
)
),
shareReplay(1),
last()
);
}
我想用 header pullingOk = true
中的参数通知后端
类似的东西:
private pullingPerfilInvestidor(): Observable<PerfilInvestidor> {
let result = this.http.get<PerfilInvestidor>(this.configService.gerarUrlNovo(`${environment.api.endpointsNovos.obterPerfil}`), {headers: this.configService.concatenarHeaders()})
return result
.pipe(
concatMap(res => iif(() => !res.hasProcessado,
of(res),
interval(500).pipe(
take(10),
concatMap(() => result),
// tap(result => console.log(result)),
)
)),
retryWhen(
error =>
error.pipe(
tap(() => console.log("error occurred ")),
delay(500),
take(3),
)
),
shareReplay(1),
last()
return this.http.get<Profitability>(this.configService.generateNewUrl(`${environment.api.newEndpoints.profitability}`), {headers: this.configService.paramOk())})
);
}
创建一个拦截器来解决这个问题
export class PullingInterceptor implements HttpInterceptor {
constructor() { }
public countRequest: number = 0;
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (request.url.includes('yourURL')) {
this.countRequest = this.countRequest + 1;
if (this.countRequest == 10) {
const newRequest = request.clone({
setHeaders: {
'your-header': 'abc'
}
});
return next.handle(newRequest);
}
return next.handle(request);
}
return next.handle(request);
}
}
我有这个请求,虽然 hasProcessado == true
再执行 10 个请求并发出最后一个请求,如果它失败,再发出 3 个请求。
但是当我发出最后一个请求时,我需要用不同的方式通知后端 header
我的要求:
public getProfitability(): Observable<Profitability> {
let result = this.http.get<Profitability>(this.configService.generateNewUrl(`${environment.api.newEndpoints.profitability}`), {headers: this.configService.concatenateHeaders()})
return result
.pipe(
concatMap(res => iif(() => res.hasProcessed,
of(res),
interval(500).pipe(
take(10),
concatMap(() => result),
tap(result => console.log(result)),
)
)),
retryWhen(
error =>
error.pipe(
tap(() => console.log("error occurred getProfitability() ")),
delay(500),
take(3),
)
),
shareReplay(1),
last()
);
}
我想用 header pullingOk = true
类似的东西:
private pullingPerfilInvestidor(): Observable<PerfilInvestidor> {
let result = this.http.get<PerfilInvestidor>(this.configService.gerarUrlNovo(`${environment.api.endpointsNovos.obterPerfil}`), {headers: this.configService.concatenarHeaders()})
return result
.pipe(
concatMap(res => iif(() => !res.hasProcessado,
of(res),
interval(500).pipe(
take(10),
concatMap(() => result),
// tap(result => console.log(result)),
)
)),
retryWhen(
error =>
error.pipe(
tap(() => console.log("error occurred ")),
delay(500),
take(3),
)
),
shareReplay(1),
last()
return this.http.get<Profitability>(this.configService.generateNewUrl(`${environment.api.newEndpoints.profitability}`), {headers: this.configService.paramOk())})
);
}
创建一个拦截器来解决这个问题
export class PullingInterceptor implements HttpInterceptor {
constructor() { }
public countRequest: number = 0;
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (request.url.includes('yourURL')) {
this.countRequest = this.countRequest + 1;
if (this.countRequest == 10) {
const newRequest = request.clone({
setHeaders: {
'your-header': 'abc'
}
});
return next.handle(newRequest);
}
return next.handle(request);
}
return next.handle(request);
}
}