【发布时间】:2017-05-20 20:38:28
【问题描述】:
我正在尝试angular2。我发现我们应该使用subscribe() 方法来检索get 或post 方法的结果:
this.http.post(path, item).subscribe(
(response: Response)=> {console.log(response)},
(error: any)=>{console.log(error)}
);
但是我想创建一个自定义版本的 subscribe() 方法,它有一个错误回调函数,它的错误参数不是 any 并且是强类型的。因此,我们将能够以这种方式订阅 Observable:
this.http.post(path, item).subscribe(
(response: Response)=> {console.log(response)},
(error: HttpError)=>{console.log(error.body)}
);
我声明HttpError如下:
import { ModelState } from "app/Base/model-state";
import { ModelStateDictionary } from "app/Base/model-state-dictionary";
import { ErrorBody } from "app/Base/error-body";
export class HttpError {
public ok: boolean;
public status: number;
public statusText: string;
public type: number;
public url: string;
public body: ErrorBody;
public static create(error: any): HttpError {
let errorBody: ErrorBody = new ErrorBody();
let body = JSON.parse(error._body)
errorBody.message = body.message == null ? "" : body.message;
errorBody.modelStateDictionary = new ModelStateDictionary();
if (body.modelState != null) {
for (let key in body.modelState) {
let modelState: ModelState = new ModelState();
modelState.Value = key;
for (let value in body.modelState[key]) {
modelState.Error.push(value);
}
errorBody.modelStateDictionary.push(modelState);
}
}
let httpError: HttpError = new HttpError();
httpError.body = errorBody;
httpError.ok = error.ok;
httpError.status = error.status;
httpError.statusText = error.statusText;
httpError.type = error.type;
httpError.url = error.url;
return httpError;
}
}
但是在某个地方我需要在订阅前调用create() 方法,并将java 对象错误转换为HttpError。我想我需要创建一个自定义的 Observable 或者可能使用map()。我是TypeScript 和Reactive programming 的新手。您能否解释一下如何进行这种转换,以便用户可以使用更好的 subscribe() 版本?
【问题讨论】:
标签: angular typescript rxjs angular2-services