Angular: как проверить тип класса после throwError перехватчиком - PullRequest
3 голосов
/ 06 ноября 2019

Я хочу проверить тип класса ошибок, который исходит от перехватчика, выполняет throwError. (Тип класса ошибок означает, что класс реализует Error.)

Но, когда я поймал эту ошибку, она работает, несмотря на другую ошибкутип. (В этом случае я хочу проверить ошибку как MyCustomError1, но она работает, несмотря на MyCustomError2.)

Примечание: MyCutomError1 и MyCutomError2 реализуют один и тот же класс ошибок.

Итак, как я должен проверитьвведите соответственно?

Мой перехватчик здесь.

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        const _req = req.clone();
        return next.handle(_req)
            .pipe(
                catchError((errRes: HttpErrorResponse) => {
                    let _error: Error = null;
                    switch (errRes.status) {
                        case 401:
                            _error = new MyCustomError1(errRes.name, errRes.message, errRes.error);
                            break;
                        case 503:
                            _error = new MyCustomError2(errRes.name, errRes.message, errRes.error);
                        default:
                            _error = errRes;
                            break;
                    }
                    return throwError(_error);
                })
            );
    }
}

Затем я хочу уловить ошибку, такую ​​как ниже.

Примечание: я буду использовать эту службу в моемкомпонент и обработать ошибку.

this.myService.doSomething()
  .pipe(
        catchError((err: Error) => {

        // How should I check the type?
        // In the case of MyCustomError2, this returns true.
        if(err instanceof MyCustomError1){
          // error handling
        }
        return EMPTY;
      })
   ).subscribe(()=>{})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...