繁体   English   中英

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

[英]Javascript error handling with try .. catch .. finally

我怀疑我正在使用finally块,并且我不理解其目的的基本原理......

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

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

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

finally块将始终运行,尝试在try块后返回true

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

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

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

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

在浏览器的控制台上运行它,它可能会给你你正在寻找的答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM