【问题标题】:TypeError: Cannot call method "closeFileCSV" of undefined -- try/finally blockTypeError:无法调用未定义的方法“closeFileCSV”——尝试/最终阻止
【发布时间】:2013-10-11 17:36:22
【问题描述】:

我目前有一个这种格式的 try/finally 块:

try {
  var someOtherObject = new SomeOtherObject(param1, param2);
  someOtherObject.doStuff();

  // Object that basically holds a 'result set' of csv rows.
  var csv = new CsvObject();
  csv.openCSV(); // does not throw an error
  do {
    try {
      // Code that grabs stuff from the csv in a straightforward fashion.
    } catch (e) {
      log.info(e); // Log the error and continue on.
    }
  } while (csv.hasNext());      

} finally {
  csv.closeFileCSV(); //throws a TypeError: Cannot call closeFileCSV() on undefined.
}

在循环中不会抛出任何错误,也不会在 finally 块之外的任何其他地方抛出错误。谁能告诉我为什么在 finally 块中调用 closeFileCSV 时会抛出 TypeError 的线索?我不是 javascript 专家,但似乎范围在这里应该不是问题。我知道 csv 已正确初始化,因为 try 块使用该对象执行操作并且不会引发任何错误。

我希望我只是没有看到明显的东西。让我知道是否需要粘贴更多代码才能解决此问题。

谢谢。

【问题讨论】:

  • 将var csv = new CsvObject();移出try块
  • 但是 Javascript 只有全局和函数作用域。假设进入了 try 块,那么这个变量应该在 finally 块中可用。

标签: javascript try-catch-finally


【解决方案1】:

我已经确定变量 someOtherObject 正在返回一个空对象。所以当调用 doStuff() 方法时,会抛出异常。但是,一旦发生此异常,finally 块会立即被触发;在 finally 块中,抛出 TypeError 是因为 csv 尚未在 try 块中初始化。

后一个错误是唯一显示出来的错误,这是造成混乱的根源。一旦我用 someOtherObject 解决了这个问题,代码就起作用了。 (我还在 close 方法周围添加了保护措施,以确保 csv 已初始化)。

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多