2017-01-17 4 views
0
'use strict'; 

class ExtendableError extends Error { 
    constructor(message) { 
     super(); 
     this.message = message; 
     this.stack = (new Error()).stack; 
     this.name = this.constructor.name; 
    } 
} 

class MyError extends ExtendableError { 
    constructor(message) { 
     super(message); 
    } 
} 

try { 
    throw new Error('Oops!'); 
} catch (err) { 
    console.log(err); 
} 

try { 
    throw new MyError('Oops!'); 
} catch (err) { 
    console.log(err); 
} 

Der erste Fehler ausspuckt:MyError Verlängerung des Arbeits nicht wie beabsichtigt

Error: Oops! 
    at Object.<anonymous> (/home/karl/dev/node/project/exceptions.js:19:11) 

Die zweite:

{ Error 
    at MyError.ExtendableError (/home/karl/dev/node/project/exceptions.js:7:23) 
... 

ich die zweite erwartete MyError: Oops! angeben.

+1

versuchen 'Super (Nachricht);' – pintxo

+0

@pintxo Nope: / –

Antwort

0

Sie haben vergessen, nur this.name auf den Konstruktor

'use strict' hinzuzufügen;

class ExtendableError extends Error { 
    constructor(message) { 
     super(); 
     this.message = message; 
     this.stack = (new Error()).stack; 
     this.name = this.constructor.name; 
    } 
} 

class MyError extends ExtendableError { 
    constructor(message) { 
     super(message); 
     this.name = "MyError" //Here you put the name 
    } 
} 

try { 
    throw new Error('Oops!'); 
} catch (err) { 
    console.log(err); 
} 

try { 
    throw new MyError('Oops!'); 
} catch (err) { 
    console.log(err); 
} 
0

Ihre Faust Ausnahme erzeugt wird, die Teilnahme zur Fehlermeldung, in Zeile 19, das ist, gerade da, wo Sie Ihren Wurf neue Fehler aufzurufen.

Die zweite, aber es ist an der Linie 7 befindet, bedeutet dies aus

this.stack = (new Error()).stack; 

Und impliziert genannt wird, dass, wenn Sie neue MyError werfen nennen, eine interne Ausnahme auf dieser Linie erzeugt wird.

Sie müssen überprüfen, warum diese Ausnahme erfolgreich ist und versuchen, es zu beheben, bevor Ihr System wie erwartet funktioniert.

Vielleicht sollten Sie Ihre super.stack verwenden, anstatt ein neues Error-Objekt in Ihrem ExtendableError Konstruktor Erstellen

Verwandte Themen