TypeError:无法调用未定义的方法“closeFileCSV” - try / finally块

时间:2013-10-11 17:36:22

标签: javascript try-catch-finally

我目前有这种格式的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块使用该对象来执行操作并且不会抛出任何错误。

我希望我没有看到明显的东西。如果需要粘贴更多代码以解决此问题,请告诉我。

感谢。

1 个答案:

答案 0 :(得分:0)

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

后一个错误是唯一可以显示的错误,这是混淆的根源。一旦我用someOtherObject解决了这个问题,代码就可以了。 (我还在close方法中添加了保护,以确保初始化csv。)