Angular如何知道请求是否超时超过三次?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Angular如何知道请求是否超时超过三次?相关的知识,希望对你有一定的参考价值。

我有一个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)
    })

以上是关于Angular如何知道请求是否超时超过三次?的主要内容,如果未能解决你的问题,请参考以下文章

超过 30 秒的请求超时错误

小程序开发 云函数超时设置了,但还是3s警报

如何判断一个程序是不是超时??

如何增加特定端点的超时?

如何使用 Html Agility Pack 使请求超时

是否可以增加 CloudFlare 超时?