Javascript可以';无法捕获映射函数中的错误
假设我有这样一个用户列表:Javascript可以';无法捕获映射函数中的错误,javascript,error-handling,try-catch,undefined,Javascript,Error Handling,Try Catch,Undefined,假设我有这样一个用户列表: var usersList = [ { firstName : 'Adam', lastName: 'Yousif', age: 23 }, { firstName : 'Mohamed', lastName: 'Ali' }, { firstName : 'Mona', lastName: 'Ahmed', age: 19 }, ]; 现在我想调用usersList上的map函
var usersList = [
{ firstName : 'Adam', lastName: 'Yousif', age: 23 },
{ firstName : 'Mohamed', lastName: 'Ali' },
{ firstName : 'Mona', lastName: 'Ahmed', age: 19 },
];
现在我想调用usersList上的map函数并返回一个修改后的列表,如下所示:
var returnList = usersList.map((_user) => {
var _age;
try {
_age = _user.age;
} catch (error) {
console.log('I caught error here : ', error); // <-- not printed
_age = 'FAILSAFE-VAULE'; // <-- not set
}
var obj = {
firstName: _user.firstName,
lastName: _user.lastName,
age: _age
}
return obj;
});
如何捕获javascript映射函数中的错误
谢谢
try…catch
块在那里不起作用,因为在访问了一个不存在的值之后,您只会收到一个未定义的
下一步就是:
var returnList = usersList.map((_user) => {
return {
firstName: _user.firstName,
lastName: _user.lastName,
age: _user.age ? _user.age : 'FAILSAFE-VAULE'
}
});
您无需为此执行“尝试捕捉”:
usersList.map((\u user)=>{
返回{
firstName:_user.firstName,
lastName:\u user.lastName,
年龄:_user.age | |‘故障保护程序’
};
});
这是因为没有抛出任何内容(年龄只是未定义的)。如果您想在映射
-操作期间了解有关此“错误”的信息,则代码段的第一部分可能是一个想法。如果您确实想使用try-catch
,请使用第二部分(当\u user.age
为未定义时,它会“手动”抛出)。后者(顺便说一句)证明了try-catch
在map
-操作中起作用
const usersList=[{
名字:“亚当”,
姓氏:“Yousif”,
年龄:23
},
{
名字:“穆罕默德”,
姓:“阿里”
},
{
名字:“莫娜”,
姓:“艾哈迈德”,
年龄:19
},
];
const getFailSafe=user=>{
如果(!user.age){
log(`Note:user.age不适用于${user.firstName}${user.lastName}`);
返回'FAILSAFE-VAULE';
}
返回user.age;
};
// 1. 如果不存在年龄,则使用警告
const returnList=usersList
.map((_用户)=>({
firstName:_user.firstName,
lastName:\u user.lastName,
年龄:getFailSafe(\u用户)
})
);
// 2. 如果.age不存在,则抛出错误
const returnListWithError=usersList
.map((_用户)=>{
让retVal={
firstName:_user.firstName,
lastName:\u user.lastName,
}
试一试{
retVal.age=_user.age |
(() => {
抛出新错误(`Error:user.age不可用于${
_user.firstName}${u user.lastName}(将继续使用'FAILSAFE-VAULE')`;
})();
}捕捉(错误){
log(`${err.message}`);
retVal.age=`FAILSAFE-VAULE`;
}
返回返回;
});
log(returnList.find(v=>isNaN(v.age));
log(returnListWithError.find(v=>isNaN(v.age))代码>
。作为控制台包装器{top:0;最大高度:100%!important;}
我认为您不应该尝试在地图中捕捉…您正在分配年龄='FAILSAFE-VAULE'代码>但从不使用年龄
?将age:_user.age
更改为age:age
您是对的@amcquaid。我编辑了这个问题。现在应该有道理了。非常感谢。
var returnList = usersList.map((_user) => {
return {
firstName: _user.firstName,
lastName: _user.lastName,
age: _user.age ? _user.age : 'FAILSAFE-VAULE'
}
});