首页 > 解决方案 > 为什么 Angular 错误句柄不会从服务中抛出错误

问题描述

当我对 api 的服务调用出现任何问题时,我已经实现了一种处理错误的方法。在代码中,我将对错误处理程序的引用传递给 Rxjs catchError 运算符,如下所示:

GetUserByUserID(id: number): Observable<UserDetails> {
  const url = `${this.baseUrl}/${this.userByID}/${id}`;

  return this.http.get<UserDetails>(url, this.httpOptions)
    .pipe(
      catchError(this.handleError)
    );
  }

错误处理程序:

import { Observable, throwError as observableThrowError } from 'rxjs';

private handleError(error: HttpErrorResponse) {
  console.log(error);
  if (error.status === 400) {
    return observableThrowError(new BadRequestError(error.error));
  }

  if (error.status === 404) {
    return observableThrowError(new NotFoundError());
  }

  if (error.status === 401) {
    return observableThrowError(new UnAuthorizedError(error));
  }

  if (error.status === 403) {
    return observableThrowError(new ForbiddenError(error));
  }

  return observableThrowError(new AppError(error));
}

在此错误处理程序方法中,我返回一个包含特定于我的应用程序域(错误域)的错误的 Observable,我创建了不同的错误类,所以当我检查错误是否是我的错误域类之一的实例时订阅 Observable。

this.router.data
  .subscribe(response => {
    this.UserDetail = response.userDetail;
    console.log(this.UserDetail);
  }, (error: AppError) => {
    if (error instanceof BadRequestError) {
      this.notifierService.notify('error', 'lease Register to login');
    } else {
      this.notifierService.notify('error', 'Something went worng... Please try again in few minutes');
    }
  }
});

将所有这些都准备好来处理错误,即返回一个特定于我的应用程序的错误的 Observable,最后检查它是我的错误域之一的实例,当订阅实际上似乎不起作用时,我不断收到这个错误控制台:

在此处输入图像描述

标签: angularrxjs6

解决方案


推荐阅读