收到401状态后如何重试请求?

时间:2018-12-12 22:14:19

标签: angular typescript observable

我想知道在第二次尝试后如何返回请求结果。

  • 步骤

    • 1:发出请求
    • 2:请求返回状态码401(未记录)
    • 3:显示登录表单(单击登录)
    • 4:触发事件,捕获该事件并重试上一个失败的请求
    • 5:直接在失败请求的组件中返回请求结果

为此,我正在使用HttpInterceptor

所以第1、2、3、4步有效,但最后一个不起作用!

 intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request)
  .pipe(
    tap(() => {}, 
      (err: any) => {
      if (err instanceof HttpErrorResponse) {
        if (err.status === 401) {
          // display login form
          this.displayLoginForm();

          // Subscribe event 
          this.store.select('retry').subscribe((data) => {
            if (data) {
              const req = request.clone({
                setHeaders: {
                  Authorization: `Bearer ${this.globalDataService.token}`
                }
              });
              // Retry the last request
              return next.handle(req).subscribe((data) => {
                if (data instanceof HttpResponse) {
               // There i am getting the result of the working request
                  console.log(data.body);
           // ???? What to do to get the result in my component var ?
                }
              });
            }
          });
        } 

      }
    })
  );

}

0 个答案:

没有答案