如何在try catch块中使用const

时间:2017-03-29 10:14:00

标签: javascript node.js syntax ecmascript-6

const是一个块级变量,所以当我尝试怀疑代码时

try{
   const foo = bar[global.name].foofoo[global.name2];
}catch (err){
    console.log(error(err.message));
}

const隐藏在{}

但是

const foo ;
try{
    foo = bar[global.name].foofoo[global.name2];
}catch (err){
    console.log(error(err.message));
}

无法正常工作,因为const必须是声明初始化 那么我应该如何在const阻止中使用try..catch

1 个答案:

答案 0 :(得分:13)

你已经击中了头部,因为区块范围你不能在try catch块中声明const并在块之外使用它。

你有 2 3个选项:

使用let

let foo;
try{
    foo = bar[global.name].foofoo[global.name2];
}catch (err){
    console.log(error(err.message));
}

或者如果在try catch块之后只有很少的代码,这一切都取决于try的成功,你可以把剩下的try 中的代码:

try{
    const foo = bar[global.name].foofoo[global.name2];
    return foo;
}catch (err){
    console.log(error(err.message));
}

修改

选项3的灵感来自@Yury Tarabanko的评论:如果可能的话将try catch部分模块化为自己的函数,其输出应该是新const的值:

function trycatch() {
    try {
        return bar[global.name].foofoo[global.name2];
    } catch (err) {
        console.log(error(err.message));
        return undefined; // or whatever you want
    }
}

const foo = trycatch(); // === bar[global.name]... if succeeded, otherwise === the return value from the catch block