我正在使用IONIC v3.0.1并尝试确定从服务器收到的错误类型。样本错误响应是
// HTTP Errors
{"error":"unauthorized","error_description":"long error description"}
// Java Exception
{"timestamp":00000000000,"status":500,"error":"Internal Server Error","exception":"java.lang.Exception","message":"Java Exception","path":"/app/login"}
我创建了各自的类来表示这些不同的错误
// for HTTP Error
export class HTTPError {
constructor() {
}
public error: string;
public error_description: string;
}
// for Java Error
export class JavaError {
constructor() {
}
public error: string;
public exception: string;
public message: string;
public path: string;
public status: number;
public timestamp: Date;
}
我试图通过使用instanceof关键字
来确定错误类型...
let error: any = JSON.parse(response);
if (error instanceof HTTPError) {
// Condition Block 1
} else if (error instanceof JavaError) {
// Condition Block 2
} else {
// Condition Block 3
}
...
对于任何响应,执行进入条件块3。 if条件总是评估为false。
我在这里做错了什么???
答案 0 :(得分:3)
JSON.parse
返回一个没有原型的Object,因此instanceof无法工作。如果你的json包含"输入"然后您可以使用它来进行比较,或者您必须比较是否存在某些属性以识别正确的对象。
唯一的选择是检查它是否具有属于类的任何属性..
if(error.error){
if(error.error_description){
// this is HttpError
}
else if(error.exception){
// this is JavaError
}
}else{
// success...
}
答案 1 :(得分:2)
你永远不会达到"条件1"或者"条件2"因为' instanceof'操作员测试原型链:
instanceof运算符测试是否为a的prototype属性 构造函数出现在对象的原型链中的任何位置。
JSON.parse()的返回值为:
与给定JSON文本对应的Object。
JSON.parse()
无法确定类型,它只返回Object实例NOT HTTPError
或JavaError
实例,您应该测试特殊属性而不是使用instanceof
操作者:
...
let resp: any = JSON.parse(response);
if (resp.error) {
if (resp.error_description) {
// handle HTTPError
} else if (resp.exception) {
// handle JavaError
}
}
...