Я хочу продолжать повторную попытку вызова на сервер (чтобы узнать, возвращает ли он значение true).
В моем сервисе я создал http-вызов, который возвращает true, если он смог получить значение, и возвращает false, если он не смог получить значение (и, таким образом, получил ошибку).
public retryServerCheck(): Observable<boolean> {
return this._httpClient.get<boolean>(this.baseUrl + 'ServerCheck')
.pipe(
map(() => true),
catchError(() => of(false)
));
}
В моем компоненте я хочу повторить это, пока не вернусь true
, и в этом заключается моя проблема.
this._serverService.retryServerCheck()
.subscribe(
(isOnline) => {
if (isOnline) {
this._helperServer.navigateToComponent('Login', undefined, 0);
console.log('online');
} else {
this.lastRetry = 'A little later...';
console.log('offline');
}
}
);
Я попытался добавить трубу перед подписчиком, но безуспешно
this._serverService.retryServerCheck()
.pipe(
retry(10),
delay(100)
).subscribe(
(isOnline) => {
if (isOnline) {
this._helperServer.navigateToComponent('Login', undefined, 0);
console.log('online');
} else {
this.lastRetry = 'A little later...';
console.log('offline');
}
}
);
Я смог повторить попытку в моем сервисе, но потом я не смог отреагировать на это в моем компоненте
public retryServerCheck(): Observable<boolean | HttpError> {
return this._httpClient.get<boolean>(this.baseUrl + 'ServerCheck')
.pipe(
retryWhen(errors => errors.pipe(delay(500))),
catchError(err => {
return this._helperService.handelHttpError(err);
})
);
}