2014-07-15 24 views
6

Próbuję użyć niestandardowych procedur obsługi błędów w Bluebird.js.Niestandardowa funkcja wstrzymania błędów Bluebird.js nie dotyczy pierwszej obietnicy?

W przykładzie poniżej catch-all obsługi nazywa, a nie obsługi MyCustomError, ale gdy przeniósł się do odrzucenia następnie funkcji (i rozwiązany firstPromise ...), przewodnik MyCustomError nazywa. Dlaczego tak jest? coś złego? Dzięki.

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

Bardzo czysty sposób dziedziczenia od błędu, używam to teraz :) Dzięki! –

Odpowiedz

4

zadeklarować klasę błędu zanim cokolwiek innego i będzie działać (zlecenia prototypowe nie podniósł)

+1

Dzięki, również dla Bluebird! – Daniel

+0

Mam dokładnie ten sam problem, ale oczywiście nic nie zrozumiałem z twojej odpowiedzi: \ Czy możesz to wyjaśnić? – scaryguy

+0

@scaryguy co dokładnie jest niejasne? – Esailija