Я реализовал 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>
Любые примеры / идеи о том, как этого добиться, были бы великолепны!
Заранее спасибо!