【问题标题】:How to use try catch for function errors in Javascript?如何使用 try catch 来处理 Javascript 中的函数错误?
【发布时间】:2018-07-05 19:15:37
【问题描述】:

我正在对某些对象进行验证。此代码通过validationRule 和validateObj 的keyN 进行了一定的验证。

每当出现错误和值不匹配时,我都需要实现一个 try catch 来记录日志。

function validationKey(keyN) {
  var valObj = window.config.validationRule;
  if (typeof(validateObj[keyN]) != 'undifined') {
    for (i = 0; i < validateObj[keyN].validationTypes[i] {
        switch (validateObj[keyN].validationTypes[i]) {
          case (dataType):
            if (typeof(_dl[keyN]) == validateObj[keyN].exceptionDataType) {
              console.log(keyN + "..value matched");
            } else {
              console.log(keyN + "..is not matched");
            }

            break;

          case ('length'):
            if (_dl[keyN].length != validateObj[keyN].exceptionLength) {
              console.log(keyN + "..value matched");
            } else {
              console.log(keyN + "..is not matched");
            }

            break;
          default:
            console.log(_dl[keyN] + "..not validated as no rule defined");

        }
      }
    }
    else {
      console.log("No validation Object available");

    }

我使用了如下的 try-catch。它没有给出任何输出

try {
  validationKey(keyN);
} catch (e) {
  console.log(e);
}

【问题讨论】:

  • 除非validationKey实际上有一些错误,比如使用未定义的变量,除非您明确执行throw error,否则您的catch不会被触发

标签: javascript function try-catch


【解决方案1】:

在您的代码中,您使用的是validateObj 而不是valObj。所以像下面这样改变它 -

var validateObj = window.config.validationRule;

【讨论】:

    【解决方案2】:

    当你遇到不匹配时,你需要“抛出”一个错误。

    throw new Error("Description for mismatch");
    

    【讨论】:

      【解决方案3】:

      您的代码中几乎没有错字。 (例如,for 循环的构造不好,使用 validateObj 而不是 valObj,您应该在 try-catch 块中为您的函数提供一个有效参数。)试试这个:

      function validationKey(keyN) {
      var valObj = window.config.validationRule;
        if (typeof valObj[keyN] != 'undifined') {
          for (i = 0; i < valObj[keyN].validationTypes[i]; i++) {
            switch (valObj[keyN].validationTypes[i]) {
              case dataType:
                if (typeof _dl[keyN] == validateObj[keyN].exceptionDataType) {
                  console.log(keyN + '..value matched');
                } else {
                  console.log(keyN + '..is not matched');
                }
      
              break;
      
              case 'length':
                if (_dl[keyN].length != validateObj[keyN].exceptionLength) {
                  console.log(keyN + '..value matched');
                } else {
                  console.log(keyN + '..is not matched');
                }
      
                break;
                default:
                  console.log(_dl[keyN] + '..not validated as no rule defined');
              }
            }
          } else {
            console.log('No validation Object available');
          }
        }  
      
      try {
        validationKey('1');
      } catch (e) {
        console.log(e.message);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-12-12
        • 2020-08-17
        • 2018-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多