如何最后使用try / catch编写错误处理块?

时间:2019-07-02 11:01:11

标签: javascript

我试图理解课程中挑战的结果,但我坚持通过,因为结果与他们的期望不符。挑战任务是:

  1. 编写一个try / catch块来尝试控制台日志myVar,该日志应故意未定义,以便生成错误 捕获错误。
  2. 在catch块中,将整个错误存储在变量SELECT `id`, (`meta` -> '$.options.info[*].data') `data` FROM `tbl` WHERE JSON_CONTAINS(`meta` -> '$.options.info[*].verified', '1');
  3. 在catch块中,将错误的名称存储在变量myError
  4. 在catch块中,将错误消息存储在变量myErrorName中 编写一个finally块,检查是否存在myErrorMessage
  5. 如果是,请定义一个变量result,其值为以下值:发生错误myError
  6. 如果没有,则定义相同的变量,结果,但为其分配值“没有发生错误!”

我的方法如下:

(myErrorName: myErrorMessage)

2 个答案:

答案 0 :(得分:5)

该代码有两个主要问题:

  1. 您有一个错字:var myErro = err;r的末尾缺少myErro

  2. 您正在尝试在err块中使用finally,但仅在catch块中使用。

...然后还有其他一些与作业似乎告诉您的不匹配

  1. 您不是在做#1,而是在做其他事情,这些事情碰巧也尝试使用myVar

  2. 您没有实现#6的任何代码。

  3. 您的代码在发生错误时分配result是将myErrorNamemyErrorMessage逐字放入字符串中,而不是使用这些变量的值。

    < / li>
  4. 您的未发生错误的消息与他们告诉您的消息有所不同,只是略有不同(包括错字)。编程至少部分是关注细节。 :-)

您不需要if (myError == err),只需if (myError)即可:

try{
  myVar();
}
catch(err){
  var myError = err;
  var myErrorName = err.name;
  var myErrorMessage = err.message;
}
 finally{
  if(myError){
    var result = "There was an error (myErrorName:myErrorMessage)";
    console.log(result);
 }else{
    console.log("No error ocurred");
 }
}

(我添加了console.log,所以我们将看到错误情况。)

我在上面只提到了#1和#2,其余的作为练习供您完成。 :-)


我应该注意,我不会那样写。在catch块中使用的finally块中声明变量确实可以与var一起使用(因为var未被块作用域并且被提升),但是误导试图维护代码的人。如果要在这两个块中都使用变量,则为了清楚起见,将声明移到块外。

答案 1 :(得分:0)

选中此选项

try{
  console.log(myVar);
}
catch(err){
  var myError = err;
  var myErrorName = err.name;
  var myErrorMessage = err.message;
}
 finally{
  if(myError){
    var result = "There was an error ("+ myErrorName+": "+myErrorMessage+")";
 }else{
   result = "No error ocurred";
 }
}