Я использую ECMAScript 6
, NodeJS 8.12
и Bluebird 3.5.2
.
Я определил пользовательский класс ошибок:
class CustomError extends Error {
constructor(message, someParameter) {
super(message);
this.name = 'CustomError';
this.someParameter = someParameter;
}
}
, и моя цепочка обещаний выглядит следующим образом:
doSomething()
.catch(CustomError, error => { ... })
.then(result => { ... })
.catch(error => { LOGGER.error(`something went terribly wrong: ${error}`); }
После отклонения в doSomething()
с CustomError, например:
new CustomError(error.message, parameterValue)
, появляется сообщение об ошибке:
something went terribly wrong: TypeError: Class constructor CustomError cannot be invoked without 'new'
Я указал это на оператор catch(CustomError, error =>
,который для сбоя при TypeError
требует catch(new CustomError, error =>
.
Даже после этого CustomError
перехват не выполняется.
Мой вопросесть, почему это происходит?
Это ограничение Bluebird?
Наконец, я видел этот вопрос , и это не относится к моему делу, так как яне использовать Babel, а также этот вопрос , который означает, что мой подход должен работать (случай ES6 в ответе).