Javascript 无法捕获地图函数内的错误

Ram*_*him 8 javascript error-handling try-catch undefined

假设我有一个像这样的用户列表:

var usersList = [
            { firstName: 'Adam', lastName: 'Yousif', age: 23 },
            { firstName: 'Mohamed', lastName: 'Ali' },
            { firstName: 'Mona', lastName: 'Ahmed', age: 19 },
        ];
Run Code Online (Sandbox Code Playgroud)

现在我想在 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;
        });
Run Code Online (Sandbox Code Playgroud)

我在地图函数内有一个 try-catch 块,它的目的是用'FAILSAFE-VALUE'. 但它没有按预期工作。

console.log(returnList);
// prints
// [ 
//     { firstName: 'Adam', lastName: 'Yousif', age: 23 },
//     { firstName: 'Mohamed', lastName: 'Ali', age: undefined }, <-- not what I want
//     { firstName: 'Mona', lastName: 'Ahmed', age: 19 } 
// ]
Run Code Online (Sandbox Code Playgroud)

如何捕获 javascript 地图函数内部的错误?

谢谢

小智 9

您不需要为此尝试捕获:

usersList.map((_user) => {
            return {
                firstName: _user.firstName,
                lastName: _user.lastName,
                age: _user.age || 'FAILSAFE-VAULE'
            };
        });
Run Code Online (Sandbox Code Playgroud)


小智 1

try...catch块在那里不起作用,因为在访问不存在的值后,您只会收到一个undefined

就按下面的方法做:

var returnList = usersList.map((_user) => {
    return {
        firstName: _user.firstName,
        lastName: _user.lastName,
        age: _user.age ? _user.age  : 'FAILSAFE-VAULE'
    }
});
Run Code Online (Sandbox Code Playgroud)