0

retrywhen当通信失败时,我正在尝试执行http.getX 次。

在 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 }
4

0 回答 0