Captura de erro personalizado não funciona no Bluebird
Estou tentando lançar e, em seguida, capturar um erro personalizado em uma cadeia de promessa do Bluebird, mas não consigo capturar o erro personalizado. Por exemplo:
function login(req, res, next) {
function LoginError() {}
return User.where('id', req.body.userId).fetch()
.then(function (location) {
if (req.body.password !== location.get('password')) {
throw new LoginError();
}
// returns a promise
return Subscription.where('userId', location.get('userId')).fetch();
})
.then(function (subscription) {
return res.send(JSON.stringify(subscription));
})
.catch(LoginError, function (err) {
return res.send('Login error');
})
.catch(function (err) {
res.send('Other error: ' + JSON.stringify(err));
});
}
Quando a senha não corresponde e lançaLoginError
, o erro foi detectado no segundo bloco de captura, não no bloco de captura paraLoginError
. O que estou fazendo errado?
Estou usando Express.js, Bluebird e Bookshelf / Knex ondeUser
é um modelo de estante de livros.