Rest 原型中引发的捕获异常(Typescript)
优秀的Angular 2/Material设计框架Teradata Covalent提供了一个RESTService抽象类,将REST api调用封装在这里: 包含扩展的代码很简单,如下所示: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, {
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;
}
}