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 の専門家ではありませんが、ここでスコープが問題になるとは思えません。try ブロックはオブジェクトを使用して処理を行い、エラーはスローされないため、csv が正しく初期化されることはわかっています。

明らかな何かが見えていないことを願っています。これを解決するためにさらにコードを貼り付ける必要がある場合はお知らせください。

ありがとう。

4

1 に答える 1

0

変数 someOtherObject が null オブジェクトを返していることがわかりました。そのため、doStuff() メソッドが呼び出されると、例外がスローされます。ただし、この例外が発生すると、finally ブロックはすぐに起動されます。また、finally ブロック内では、csv が try ブロックでまだ初期化されていないため、TypeError がスローされます。

ただし、表示されるのは後者のエラーだけであり、これが混乱の元でした。someOtherObject の問題を解決すると、コードは機能しました。(csv が確実に初期化されるように、close メソッドの周りにガードも追加しました)。

于 2013-10-11T19:10:11.197 に答える