2017-04-08 1 views
0

Im Hauptprozess meiner Electron App versuche ich, eine Ausnahme zu behandeln, die beim Erstellen einer Datei ausgelöst wird, die bereits existiert. Meine catch-Klausel wird jedoch nie eingegeben, und die Ausnahme wird an den Benutzer gespammt. Was mache ich falsch?Keine Ausnahme von fs.createWriteStream()

let file; 
try { 
    // this line throws *uncaught* exception if file exists - why??? 
    file = fs.createWriteStream('/path/to/existing/file', {flags: 'wx'}); 
} 
catch (err) { 
    // never gets here - why??? 
} 
+0

'createWriteStream' keine Ausnahme werfen, es * einen Fehler an seinen * asynchronen Rückruf gibt. – Bergi

+0

Im Gegensatz zu einigen anderen 'fs'-Methoden akzeptiert' createWriteStream' keinen Rückruf. –

+1

Ja, richtig, es gibt "Fehler" -Ereignisse aus, die Sie mit einem Callback behandeln müssen (und scheinbar, wenn keine Handler registriert sind, wird eine globale Ausnahme asynchron ausgelöst). – Bergi

Antwort

2

Der richtige Weg, um diesen Fall zu behandeln ist durch zum error Ereignisse hören:

const file = fs.createWriteStream('/path/to/existing/file', {flags: 'wx'}); 
file.on('error', function(err) { 
    console.log(err); 
    file.end(); 
}); 
1

Was ich gefunden habe ist: https://github.com/electron/electron/issues/2479

ich mit reinem Node.js nachzubilden versucht, und es fängt Fehler mit process.on('uncaughtException', callback)

let desiredPath = '/mnt/c/hello.txt'; 
let fs = require('fs'); 

process.on('uncaughtException', function (error) { 
    console.log('hello1'); 
}); 

try { 
    fs.createWriteStream(desiredPath, { 
    flags: 'wx', 
    }); 
} 
catch (err) { 
    console.log('hello'); 
} 

//Output is: 'hello1' 

Ich versuchte es mit Ubuntu Shell auf Windows 10, in meinem Fall habe ich keine Berechtigungen, diese Datei zu lesen und process.on('uncaughtException', callback) fängt es richtig ab.