在Observable.timer之后,angular2 Observable.throw不起作用

时间:2017-09-12 14:20:58

标签: angular typescript observable retrywhen

当通讯失败时,我试图在retrywhen上进行http.get X次。

在X次之后,我想抛出一个无法连接的错误。

如果我只在我的DelayWhenObservable.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 }

0 个答案:

没有答案