Как в Angular + Rxjs выполнить операции внутри потока только тогда(ожидая), когда значение другого потока будет true? (не filter!)

Рейтинг: 0Ответов: 1Опубликовано: 25.03.2023

Есть Observable, но пропускать данные нужно только тогда, когда значения другого Observable= true.

Пример - выполняю http запросы, а если токен невалиден, я блокирую выполнение запросов на момент, пока не получу новый токен.... при этом запросы не должны пропасть, как при filter, а просто подождать нового токена(тобеж значения другого Observable).

Как такое реализовать?

export class HttpServiceBase {
  constructor(private tokenService: TokenService) {}
  protected iAmWaitingForNewToken: BehaviorSubject<boolean> = new BehaviorSubject(false);

  blockRequestsUntilTokenRefreshed(value: boolean) {
    this.iAmWaitingForNewToken.next(value);
  }

  protected checkPipe<T>(source: Observable<T>) {
    return source.pipe(
**// какой оператор сюда подставить?**
      map((data) => {
        return {
          data: data,
          hasError: false,
        };
      }),
      catchError(async (err) => {
        return { data: err.error, hasError: true };
      })
    );
  }

  protected processOptionsWithToken(options: object = {}) {
    const auth = {
      headers: new HttpHeaders().set(
        'Authorization',
        `Bearer ${this.tokenService.getAccessToken()}`
      ),
    };
    return {
      ...options,
      ...auth,
    };
  }
}

пример подключения

getWithToken$(url: string) {
    return this.http
      .get(this.hostUrl + url, this.processOptionsWithToken())
      .pipe(this.checkPipe);
  }

Ответы

▲ 1

В твоем случае, я бы использовал оператор buffer(), который соберет значения в массив и выдаст их тогда, когда нужный Observable выдаст значение