0

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

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

谢谢。

4

1 回答 1

0

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

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

于 2013-10-11T19:10:11.197 回答