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'
    }
});