Ich habe eine Unterroutine in Node, um die Konfiguration usw. zu laden, bevor die richtige Anwendung startet. Es stellt sich heraus, dass für den Fall, dass die Datei nicht gefunden wird, die Ausnahme nicht erfasst wird und die App bricht.Exception rutscht durch try ... catch in Javascript
Relevante Code:
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');
}
}
Wenn die Datei nicht gefunden wird, die fs.accessSync()
wird eine Ausnahme werfen. Gut, denn es ist da, um fs.readFileSync()
zu sichern. Aber ich dachte, dass diese Ausnahme sich durch aufrufende Funktionen ausbreiten wird und dort eingefangen werden kann - daher die try...catch
in configure()
.
Ich möchte nicht die Ausnahme in loadFileSync()
lösen, wie es an anderer Stelle verwendet wird und Funktionen aufrufen loadFileSync()
sind mit der Ausnahme anders zu behandeln. Also, was ist der richtige Weg, um gegen Dateien, die hier nicht gefunden werden, und sprudelnde Ausnahmen im Allgemeinen zu schützen?
können Sie versuchen: setzen Sie versuchen/fangen in loadFileSync und dann innerhalb fangen fangen den gleichen Fehler. Auf diese Weise setzen Sie try/catch auf accessSync und der Fehler wird von configure abgefangen. Nicht sicher, es wird funktionieren – binariedMe
Ja, versuchen Sie ... fangen Sie fs.accessSync() hilft. Aber ich weiß nicht wirklich, warum es funktioniert und wie es allgemein funktioniert. Ich werde dankbar sein, wenn Sie es ausarbeiten könnten. – Forseti
Nun, ich kann nicht zu viel über die Implementierung von "AccessSync" -Methode kommentieren und ich glaube, dass die Implementierung einige unbehandelte Fehler wirft und nicht wirklich synchron ist, sondern eine Schleife und daher sind Sie nicht in der Lage, den Fehler zu bekommen, aber die gleiche Kapselung Methode in try/catch forces, um einen nicht behandelten Fehler zu erfassen. – binariedMe