Как подписаться на тему из метода Utils - PullRequest
0 голосов
/ 22 октября 2019

Я реализовал 2-й пример из this - он работает без сбоев и перезапустит метод, если увидит 503.

Моя цель - теперь показать предупреждениена входе, когда повторная попытка происходит с первого раза. Однако метод находится в классе utils отдельно от компонента, в котором я хочу установить флаг, отображающий предупреждающее сообщение.

RxJS использует класс

export const genericRetryStrategy = (
  {
    maxRetryAttempts = 4,
    scalingDuration = 1000,
    excludedStatusCodes = [],
    retry = new Subject<any>(),
  }: {
    maxRetryAttempts?: number;
    scalingDuration?: number;
    excludedStatusCodes?: number[];
    retry?: any;
  } = {},
) => (attempts: Observable<any>) => {
  return attempts.pipe(
    switchMap((error, i) => {
      const retryAttempt = i + 1;
      // if maximum number of retries have been met
      // or response is a status code we don't wish to retry, throw error
      if (retryAttempt > maxRetryAttempts || excludedStatusCodes.find(e => e === error.status)) {
        return _throw(error);
      }
      // retry after 1s, 2s, 6s and 8s
      if (retryAttempt === 3 || retryAttempt === 4) {
        scalingDuration = 2000;
      }
      console.log(`Attempt ${retryAttempt}: retrying in ${retryAttempt * scalingDuration}ms`);
      return timer(retryAttempt * scalingDuration);
    }),
    finalize(() => console.log('Abandoning..')),
  );
};

.. Component.ts

public submit() {
.
.
.

this.someService // The service contains return methods
   .create(data)
   .pipe(
     retryWhen(genericRetryStrategy({
       retry: true,
       excludedStatusCodes: [200],
     })),
     catchError(error => of(error)),
   )
   .subscribe((response: someResponse) => {
     this.someService.saveData(response.data, response.jwt);

Я хочу, чтобы класс утилит RxJS управлял при отображении следующего сообщения

Внешний интерфейс

 <p *ngIf="retry" class="warning">
   Retrying..
 </p>

Любые примеры / идеи о том, как этого добиться, были бы великолепны!

Заранее спасибо!

...