2017-11-30 2 views
1

Folgende tryCatch Decorator kann den Fehler nicht abfangen.TryCatch Decorator fängt keine Fehler

const TryCatchWrapper = (target, key, descriptor) => { 
    const fn = descriptor.value; 
    descriptor.value = (...args) => { 
    try { 
     fn.apply(this, args); 
    } catch (error) { 
     console.log('Entered Catch----->'); 
     const [,, next] = args; 
     next(error); 
    } 
    }; 
}; 

Der Versuch, in der folgenden Klassen

class CustomerDetails { 

    @TryCatchWrapper 
    async getCustomerSummary(req, res, next) { 
     throw new Error('Whoops!!!'); 
    } 
} 

Problem zu verwenden: - 'Eingetragen Fang ----->' nie gedruckt wird.

Antwort

4

Es ist, weil getCustomerSummary eine async Funktion ist. Eine async Funktion nie wirft; Stattdessen gibt es ein Versprechen zurück, das abgelehnt wird. (Innen eine async Funktion, wenn Sie try/catch um await verwenden, die in Versprechen Ablehnung gedreht wird Handhabung. Aber in einer nicht async Funktion Aufruf einer async Funktion, dass Zucker wird nicht angewendet.)

Sie Ich muss den Decorator ändern, um den Rückgabewert der Funktion zu sehen, und, wenn es sich um ein Versprechen handelt, die Ablehnung von Versprechen.

+0

Vielen Dank. Wenigstens gab es mir eine Richtung. –