2014-07-15 7 views
6

Ich versuche, die benutzerdefinierten Fehlerhandler von Bluebird.js zu verwenden.Bluebird.js benutzerdefinierte Fehler Catch-Funktion, gilt nicht für das erste Versprechen?

Im Beispiel unten die catch-all-Handler, nicht der MyCustomError Handler genannt, aber wenn ich die Ablehnung in die Funktion dann bewegte (und beschlossen, das firstPromise ...) wird die MyCustomError Handler aufgerufen. Warum ist das? etwas falsch gemacht? Vielen Dank.

var Promise = require('bluebird'), 
debug = require('debug')('main'); 

firstPromise() 
    .then(function (value) { 
     debug(value); 
    }) 
    .catch(MyCustomError, function (err) { 
     debug('from MyCustomError catch: ' + err.message); 
    }) 
    .catch(function (err) { 
     debug('From catch all: ' + err.message); 
    }); 

/* 
* Promise returning function. 
* */ 
function firstPromise() { 
    return new Promise(function (resolve, reject) { 
    reject(new MyCustomError('error from firstPromise')); 
    }); 
} 
/* 
* Custom Error 
* */ 
function MyCustomError(message) { 
    this.message = message; 
    this.name = "MyCustomError"; 
    Error.captureStackTrace(this, MyCustomError); 
} 
MyCustomError.prototype = Object.create(Error.prototype); 
MyCustomError.prototype.constructor = MyCustomError; 
+1

Sehr saubere Art und Weise von Fehlern zu erben, verwende ich diese jetzt :) Vielen Dank! –

Antwort

4

erklären die Fehlerklasse, bevor irgendetwas anderes und es wird funktionieren (Prototyp Zuordnungen sind nicht hochgezogen)

+1

Danke, auch für Bluebird! – Daniel

+0

Ich habe genau das gleiche Problem, aber offensichtlich habe ich nichts aus deiner Antwort verstanden: \ Könntest du es klarstellen? – scaryguy

+0

@scaryguy was genau ist unklar? – Esailija