Rest 原型中引发的捕获异常(Typescript)

Rest 原型中引发的捕获异常(Typescript),rest,angular,typescript,exception-handling,prototype,Rest,Angular,Typescript,Exception Handling,Prototype,优秀的Angular 2/Material设计框架Teradata Covalent提供了一个RESTService抽象类,将REST api调用封装在这里: 包含扩展的代码很简单,如下所示: export class CustomRESTService extends RESTService<any> { constructor(private _http: Http /* or HttpInterceptorService */) { super(_http, {

优秀的Angular 2/Material设计框架Teradata Covalent提供了一个RESTService抽象类,将REST api调用封装在这里:

包含扩展的代码很简单,如下所示:

export class CustomRESTService extends RESTService<any> {
  constructor(private _http: Http /* or HttpInterceptorService */) {
    super(_http, {
      baseUrl: 'www.api.com',
      path: '/path/to/endpoint',
      headers: new Headers(),
      dynamicHeaders: () => new Headers(),
      transform: (res: Response): any => res.json(),
    });
  }
}
导出类CustomRESTService扩展了RESTService{
构造函数(私有的http:http/*或HttpInterceptorService*/){
超级(http,{
baseUrl:'www.api.com',
路径:'/path/to/endpoint',
标题:新标题(),
dynamicHeaders:()=>新标题(),
transform:(res:Response):any=>res.json(),
});
}
}
RESTService抽象类中的“update”方法如下所示:

  public update(id: string | number, obj: T, transform?: IRestTransform): Observable<any> {
    let requestOptions: RequestOptionsArgs = this.buildRequestOptions();
    let request: Observable<Response> = this.http.patch(this.buildUrl(id), obj, requestOptions);
    return request.map((res: Response) => {
      if (res.status === 200) {
        if (transform) {
          return transform(res);
        }
        return this.transform(res);
      } else {
        return res;
      }
    }).catch((error: Response) => {
      return new Observable<any>((subscriber: Subscriber<any>) => {
        try {
          subscriber.error(this.transform(error));
        } catch (err) {
          subscriber.error(error);
        }
      });
    });
  }
公共更新(id:string | number,obj:T,transform?:IRestTransform):可观察{
让requestOptions:RequestOptionsArgs=this.buildRequestOptions();
let-request:Observable=this.http.patch(this.buildUrl(id)、obj、requestOptions);
返回请求.map((res:Response)=>{
如果(资源状态===200){
如果(变换){
返回变换(res);
}
返回此.transform(res);
}否则{
返回res;
}
}).catch((错误:响应)=>{
返回新的可观察对象((订户:订户)=>{
试一试{
subscriber.error(this.transform(error));
}捕捉(错误){
订户错误(error);
}
});
});
}
我的问题是:如果抽象类的update方法抛出异常,如何在CustomRESTService类中捕获该异常?例如,用户可以使用什么类型的脚本代码在UI中显示错误


谢谢。

第一件事是第一件事-为什么您希望在rest客户端中捕获它,而不是在应用程序的逻辑中捕获它

假设您有足够的理由这样做(您在CustomRESTClient类中运行的其他一些基础结构代码),我将重写更新函数并在那里实现错误处理

一个没有可观测数据的简单示例:

abstract class Base {
  update(n:number):number  {
    return n;
  }

  test():bool;
}

class Child extends Base {
  update(n:number):number {
    return super.update(n)*2;
  }

  test():bool {
    return true;
  }
}