当通讯失败时,我试图在retrywhen
上进行http.get
X次。
在X次之后,我想抛出一个无法连接的错误。
如果我只在我的DelayWhen
和Observable.throw
中进行,它会直接正常工作并在第一次尝试时返回。
但是,如果我第一次返回Obersvable.timer
,延迟下一次尝试连接后调用Observable.throw
,但它不会被转发到我的上层捕获!?
public initializeCommunication(): Promise<boolean> {
return new Promise<boolean>((resolve: (r: boolean) => void, reject: (e:
Error) => void) => {
return this.getInternal<DTO>(this.Url, null,
'clientidentity')
.retryWhen((errors: Observable<any>) => {
// Retry upon communication failure
// TODO: Consider only retrying a limited number of
//times and throw an error (call reject)
return errors.delayWhen((response: Response) => {
retrytrys++;
console.log('number of retries ' + retrytrys);
if (retrytrys > 2) {
console.log('throw');
return Observable.throw(new Error('error!'));
}
console.log('ret');
return Observable.timer(this.RETRY_TIMEOUT);
});
})
.subscribe()
});
}
这个函数我正在从另一个服务调用,并且没有调用catch。
myService.initializeCommunication().then((r: boolean) => {
})
.catch((error) => { //this is not called }