2013-10-11 42 views
0

我現在有這種格式的一個try/finally塊:類型錯誤:無法調用未定義的方法「closeFileCSV」 - 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塊中調用closeFileCSV時拋出TypeError?我不是一個JavaScript專家,但它似乎並不像範圍應該是一個問題在這裏。我知道csv被正確初始化,因爲try塊使用對象來做東西,並且不會引發任何錯誤。

我希望我只是沒有看到明顯的東西。讓我知道是否需要粘貼更多代碼才能解決此問題。

謝謝。

+1

在'try'塊外移動'var csv = new CsvObject();' – karthikr

+1

但Javascript只有全局和函數範圍。假設輸入了try塊,那麼這個變量應該在finally塊中可用。 – Slims

回答

0

我確定變量some​​OtherObject正在返回一個空對象。所以當調用doStuff()方法時,會拋出異常。但是,一旦發生這種異常,finally塊會立即被觸發;並在finally塊內,TypeError被拋出,因爲csv尚未在try塊中初始化。

但後一個錯誤是唯一一個顯示出來的,但這是混淆的根源。一旦我用someOtherObject解決了這個問題,代碼就工作了。 (我還在close方法中加入了警衛以確保csv已初始化)。

相關問題