我有一个Angular 4应用程序,在浏览整个应用程序时有很多正在进行的http请求。
当http超时发生三次或更多时,我也想做点什么。
http请求中可能会发生其他错误,但我只想关注超时错误。
我的http_interceptor中有以下代码。
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const re = '/u/auth/login';
const defaultTimeout = 10000;
if (req.url.search(re) || req.url.search('api.giphy.com/v1') === -1) {
const headers = new HttpHeaders({
Authorization: `Bearer ${localStorage.getItem('token')}`,
// 'Content-Type': 'application/json'
})
const dupReq = req.clone({headers});
const timeOut = Number(req.headers.get('timeout')) || this.defaultTimeout
return next.handle(dupReq).pipe(
timeout(timeOut),
catchError(e => {
return of(null)
})
)
} else {
return next.handle(req)
}
}
如何处理超时错误,我怎么知道它们发生了三次或更多次。我会对每个错误做一个增量吗?并只是使用一个条件来做这个功能?
作为一个额外的问题,我怎么能成功回调处理拦截器?
感谢有人可以提供帮助。提前致谢。
链接重试当上面的方法订阅方法。
import 'rxjs/add/operator/retryWhen';
import 'rxjs/add/operator/delay';
import 'rxjs/add/operator/scan';
.retryWhen((err)=> {
return err.scan((attempt) => {
if(attempt>5){
throw(err);
}else{
attempt++;
console.log("attempt number "+attempt);
return attempt;
}
},0
).delay(1000)
})