2012-05-14 34 views
1

我試圖訪問一個文件時,可能不存在:爲什麼在承諾中「失敗」不會發現錯誤?

var localFolder = Windows.Storage.ApplicationData.current.localFolder; 

localFolder.getFileAsync(stateFile).then(function (file) { 
      Windows.Storage.FileIO.readTextAsync(file).then(function (text) { 
     // do something with the text 

    }); 
}, function (err) { 
    // log error, load dummy data 

}); 

如果文件不存在,則「失敗」方法不會被調用,但它僅發生後,我的應用程序有一個異常中止「文件未找到」。只有當我按下「繼續」的調試器它是否繼續「失敗」的方法..

我做錯了什麼?我應該事先檢查存在嗎?

+0

爲什麼然後有失敗的方法?我在這裏有點失落.. :) –

+0

忘記它了,我以爲你在談論jQuery的承諾。抱歉。 – fcalderan

+0

我很確定WinJS Promise == jQuery承諾行爲.. –

回答

2

您會看到第一次機會的例外情況。調試器正在破碎。如果在調試器對話框中點擊「繼續」按鈕,應用程序將繼續運行,異常處理程序將運行。

您可以通過使用「調試|例外」菜單來關閉第一次機會異常。

+0

你是對的,但我不能把「第一次機會例外」作爲開發者關閉,對嗎?所以我一定會每次看到這個錯誤信息? –

+0

當然可以。轉到調試菜單,例外菜單項。在對話框中,你應該看到一個樹形視圖。在「JavaScript Runtime Exceptions」下,關閉「Thrown」列中的複選框,這將關閉第一次機會異常的中斷。不過,您可能想要記住這個複選框的位置 - 當跟蹤異步代碼中的問題時,第一次機會異常會派上用場。 –

+0

但這*完全是我的觀點。我知道我*可以*關閉該複選框。我只是說開發者,我真的不應該。這就是爲什麼你的建議對我沒有意義的原因:/ –

1

我一直在爲這個問題掙扎兩三天,終於來到了下面的解決方案:我使用getFilesAsync函數來獲取文件夾中所有文件的列表,然後查看這個列表以瞭解需要的文件存在。之後,我可以調用getFileAsyns而不會拋出。不是很漂亮,但適合我。我同意假設一個開發人員可以關閉異常並不是最好的建議......在我看來,這個問題應該被視爲RT實現中的一個錯誤。

相關問題