retrywhen
当通信失败时,我正在尝试执行http.get
X 次。
在 X 次之后,我想抛出一个连接失败的错误。
如果我只在我DelayWhen
的 an中这样做,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 }