使用 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);
    }
}