簡體   English   中英

Angular如何知道請求的超時時間是否超過三倍?

[英]Angular how to know if a request has timeout more than three times?

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

如何處理超時錯誤,以及如何知道它們發生了3次或以上。 我會增加每個錯誤的數量嗎? 並僅使用條件來執行該功能?

作為一個額外的問題,我如何也可以成功地對攔截器進行回調處理?

感謝有人可以幫忙。 提前致謝。

訂閱方法上方的鏈式retryWhen方法。

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)
    })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM