我想继续重试对服务器的调用(以查看它是否返回true)。
在我的服务中,我创建了一个http调用,如果它能够检索到一个值,则返回true;如果无法检索到一个值(从而得到一个错误),则返回false。
$(()=>{
// make divs with an onclick attribute tabbable/clickable
$('div[onclick]')
.attr('tabindex', '0') // Add tab indexes
.keypress((evt)=>{
var key = evt.key;
evt.preventDefault(); // Ensure all default keypress
// actions are not used
if (key === ' ' || key === 'Enter') { // Only send click events for Space
// or Enter keys
evt.currentTarget.click(); // Run the click event for element
}
});
});
在组件中,我想重试此操作,直到返回public retryServerCheck(): Observable<boolean> {
return this._httpClient.get<boolean>(this.baseUrl + 'ServerCheck')
.pipe(
map(() => true),
catchError(() => of(false)
));
}
,这才是我的问题。
true
我尝试在subsribe前面添加一个管道,但是没有运气
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');
}
}
);
答案 0 :(得分:1)
catchError
和retryWhen
都将抑制流中的错误。因此,组件中的错误已得到处理。
尝试使retryWhen
负责处理重试次数
// service
public retryServerCheck() {
return this._httpClient.get(this.baseUrl + 'ServerCheck').pipe(
retryWhen(error$ => error$.pipe(
take(10), // <-- number of retries
delay(500),
concat(
/* either throw your own error */
throwError('no more retries left')
/* or to pass original error -- use `NEVER` */
// NEVER
)
))
)
}
// component
this._serverService.retryServerCheck()
.subscribe({
next: (result) => {
// succeeded
},
error: (error)=> {
// failed
}
});
或将expand
添加到组件中-当流中有false
时重试。