最后使用try .. catch ..进行Javascript错误处理

时间:2008-11-13 05:01:40

标签: javascript error-handling finally

我怀疑我错误地使用了finally块,并且我不理解其目的的基本原理......

 function myFunc() {
      try {
           if (true) {
                throw "An error";
           }
      } catch (e) {
           alert (e);
           return false;
      } finally {
           return true;
      }
 }

此函数将运行catch块,警告“错误”,但随后返回true。为什么不返回假?

3 个答案:

答案 0 :(得分:83)

  

finally块包含在try和catch块执行之后但在try ... catch语句之后的语句之前执行的语句。 finally块执行是否抛出异常。如果抛出异常,即使没有catch块处理异常,finally块中的语句也会执行。 more

finally阻止将始终运行,请在true阻止后返回try

function myFunc() {
     try {
         if (true) {
               throw "An error";
          }
          return true;
     } catch (e) {
          alert (e);
          return false;
     } finally {
          //do cleanup, etc here
     }
 }

答案 1 :(得分:10)

最后,当您离开try块时执行块。在你的代码中,这会在你返回false时发生。这会将返回值设置为false并尝试退出该函数。但首先它必须退出触发finally的try块并将返回值覆盖为true。

许多人认为每个函数都有一个返回语句是一个很好的编程习惯。考虑在函数的开头创建一个var retval,并在整个函数中将其设置为true或false,然后构造代码,使其正确地落到底部的单个return中。

答案 2 :(得分:1)

function getTheFinallyBlockPoint(someValue) {
    var result;
    try {
        if (someValue === 1) {
            throw new Error("Don't you know that '1' is not an option here?");
        }
        result = someValue
    } catch (e) {
        console.log(e.toString());
        throw e;
    } finally {
        console.log("I'll write this no matter what!!!");
    }

    return result;
};

getTheFinallyBlockPoint("I wrote this only because 'someValue' was not 1!!!");
getTheFinallyBlockPoint(1);

在您的浏览器控制台上运行此操作,它可能会为您提供您正在寻找的答案。