AngularのHTTPインターセプターで、エラーチェーンの途中で抜けたい

HTTPインターセプターを使って401エラーの場合にログイン画面へリダイレクトしたいのだが、うまくいかない。

どうも後続のインターセプターでthrowErrorしているため、リダイレクトされていない気がする。エラーチェーンを途中で抜けるにはどうしたらよいのだろうか?

試しにempty observableを返してみたのだが、やっぱり後続のエラー処理に入ってしまう…。うーん。

(2020.05.31追記)

チェーンを抜けられないのが原因なのではなく、Router の navigate 呼び出しができていないことが原因だった。コンソールにエラーが出ていないので疑っていなかったが、console.log(route) とすると undefined …。

下記の感じで呼び出していたのでインスタンス変数が参照できていなかったみたい。

  intercept(req: HttpRequest<any>, next: HttpHandler) {
    return next.handle(req)
      .pipe(
        tap(null, this.handleUnauthorizedError)
      );
  }

handleUnauthorizedError はこんな感じ↓

  private handleUnauthorizedError(error: HttpErrorResponse) {
    if (error.status === 401) {
      this.router.navigate(['/login']) // this.router が undefined になっていた
    }
  };

で、下記のように修正したらいけた。

  intercept(req: HttpRequest<any>, next: HttpHandler) {
    return next.handle(req)
      .pipe(
        tap(null, error => this.handleUnauthorizedError(error))
      );
  }

コメントを残す