有几种可能性:
尝试捕获
try {
errorMessage = error.responseJSON.error.message;
} catch(e) { }
失败于:
Object.defineProperty(error, 'responseJSON', {
get: function() { throw new Error('This will not be shown')
});
&&
errorMessage = error && error.responseJSON && error.responseJSON.error && error.responseJSON.error.message
失败原因:
error.responseJSON = 0
// errorMessage === 0 instead of undefined
函数
function getDeepProperty(obj,propstr) {
var prop = propstr.split('.');
for (var i=0; i<prop.length; i++) {
if (typeof obj === 'object')
obj = obj[prop[i]];
}
return obj;
}
errorMessage = getDeepProperty(error, 'responseJSON.error.message');
失败原因:
// It's hard(er) to use
替代函数 - 请查看@Olical的评论
function getDeepProperty(obj) {
for (var i=1; i<arguments.length; i++) {
if (typeof obj === 'object')
obj = obj[arguments[i]];
}
return obj;
}
errorMessage = getDeepProperty(error, 'responseJSON', 'error', 'message');
&&
更糟)。字符串可能看起来很奇怪,但它是最灵活和紧凑的解决方案。另一种选择是传递一个数组,它只是预先拆分的字符串。然后迭代该数组并深入目标对象。 - Olical