我有一個節點中的子例程加載配置等,然後正確的應用程序啓動。事實證明,如果沒有找到文件,這個異常將無法捕捉並破壞應用程序。異常通過嘗試...滑入Javascript
相關代碼:
const fs = require('fs');
class FileParser {
static configure(filename) {
let file;
try {
file = this.loadFileSync(filename);
} catch (err) {
console.log(`File ${filename} not found`);
}
// ...
}
static loadFileSync(filename) {
fs.accessSync(filename, fs.F_OK);
return fs.readFileSync(filename, 'utf8');
}
}
如果找不到文件fs.accessSync()
會拋出異常。好,因爲它在那裏保護fs.readFileSync()
。但我認爲這個例外會通過調用函數傳播,並且可以在那裏被捕獲 - 因此中的try...catch
。
我不想解決loadFileSync()
中的異常,因爲它在其他地方使用,調用loadFileSync()
的函數將以不同的方式處理異常。那麼,在這裏找不到文件的正確方法是什麼?冒泡例外情況一般?
你可以試試: 把try/catch放在loadFileSync中,然後在catch裏面拋出同樣的錯誤。通過這種方式,您可以在accessSync上放置try/catch,然後引發錯誤將被配置捕獲。不知道它會工作 – binariedMe
是的,嘗試...趕上fs.accessSync()的幫助。但我真的不知道它爲什麼會起作用,什麼是通用的方式。如果你能詳細說明,我將不勝感激。 – Forseti
嗯,我無法對「accessSync」方法的實現進行太多評論,我相信實現會拋出一些未處理的錯誤,並且實際上並不是同步,而是一個循環,因此您無法獲取錯誤,但是封裝了相同的錯誤方法在try/catch中捕獲任何未處理的錯誤。 – binariedMe