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.

questionAnswers(1)

yourAnswerToTheQuestion