rxjs超时操作符可以触发函数,而不是返回错误并取消http调用

时间:2019-07-10 09:23:05

标签: angular rxjs rxjs6 angular-http-interceptors angular-httpclient-interceptors

我正在实现一个角度拦截器服务,该服务查找错误并显示一个小吃栏,现在我正尝试添加一些功能来处理“无互联网”或“慢互联网”。我尝试使用timeout运算符,但是在超时之后,HTTP调用被取消,但是我的要求是通知用户其互联网速度很慢,然后可能在一段时间后取消,因此我需要timeout运算符来触发一个函数而不是触发一个错误

这是我的代码


  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    request = request.clone({

      setHeaders: {
        Authorization: `Bearer ${this.user.getToken()}`
      }
    });

    return next.handle(request).timeout(8000)
      catchError((error) => {
        console.log(error)
        console.log(error.name)
        if(error.name == 'TimeoutError'){
          this.alert.snack('Your Internet seems to be very slow','OK',4000)
          this.alert.showSlowInternet()

        }
        else if(error.error.detail === "Given token not valid for any token type"){
          this.global.refresh(this.router.url)
        }
        else if(error.error.detail === "No Connectivity"){
          this.alert.dismissableSnack('No Connectivity detected','DISMISS',)
        }
        else if(error.error.detail){
        this.alert.snack(error.error.detail,'OK')
        }

        else{
            this.alert.snack('Server not responding','OK')
        }
          return throwError(error);
      })
  }

0 个答案:

没有答案