Benutzerdefinierte Fehler und der Catch von bluebird mit ErrorClass führen zu unbeabsichtigtem Verhalten

8

Ich versuche ein Modul für benutzerdefinierte Fehler zu implementieren.

Es sollte möglich sein, einen individuellen Fehler in der require-Anweisung der App mit diesem Modul zu instanziieren:

%Vor%

Dies ist das Modul:

%Vor%

Der oben genannte "Required-One-Liner" funktioniert so weit.

Nun, in meinem Dienst möchte ich diesen Fehler explizit abfangen:

%Vor%

Wenn ich das Versprechen von fooService.bar in meinem Test ablehne, indem ich einen MyCustomError werfe, funktioniert das großartig.

ABER, das funktioniert nur, weil mein Test und der Dienst dieselbe Instanz von MyCustomError verwenden.

Wenn ich zum Beispiel den Caching-Mechanismus in meinem Custom-Error-Modul entferne, wird der Catch nicht mehr erreicht / ausgeführt, weil bluebird nicht versteht, dass die beiden Fehler vom selben Typ sind:

%Vor%

Der spezifische Code der Handhabung von bluebird befindet sich in catch_filter.js, Sie können sich ansehen genau hier .

Obwohl der Ansatz in meiner App funktioniert, führt dies eher zu Problemen, wenn mehrere Module das benutzerdefinierte Fehlermodul verwenden und die Freigabe derselben Instanzen nicht mehr gegeben ist.

Wie kann ich dieses Konzept durch nicht erstellen und ausführen, indem ich die Instanzen, sondern den Fehlertyp selbst vergleiche?

Prost,
Christopher

    
Christopher Will 19.11.2015, 21:31
quelle

2 Antworten

3

Ich kam schließlich zu einem etwas anderen Ansatz. Für Gleichgesinnte ist dies das Ergebnis:

ErrorFactory

%Vor%

Fehler

%Vor%

Ich erstelle ein separates Modul, das diese Klassen enthält.

Dann kann ich in meiner Implementierung Fehler wie folgt einzeln abfangen:

%Vor%

Werfen

%Vor%

Erfordern

%Vor%

Das einzige, was ich immer noch nicht verstehe, ist die Notwendigkeit, eine Prädikat-Funktion zu verwenden, statt nur das error-Objekt an die catch-Klausel zu übergeben. Aber ich kann damit leben.

    
Christopher Will 24.11.2015, 15:12
quelle
3

Sie können auch Prädikatfunktionen mit catch

verwenden %Vor%     
Esailija 26.11.2015 15:02
quelle