Erros estendidos não têm rastreio de mensagem ou pilha
Ao executar esse trecho através do BabelJS:
class FooError extends Error {
constructor(message) {
super(message);
}
}
let error = new FooError('foo');
console.log(error, error.message, error.stack);
isso gera
{}
o que não é o que eu espero. Corrida
error = new Error('foo');
console.log(error, error.message, error.stack);
produz
{} foo Error: foo
at eval (eval at <anonymous> (https://babeljs.io/scripts/repl.js?t=2015-05-21T16:46:33+00:00:263:11), <anonymous>:24:9)
at REPL.evaluate (https://babeljs.io/scripts/repl.js?t=2015-05-21T16:46:33+00:00:263:36)
at REPL.compile (https://babeljs.io/scripts/repl.js?t=2015-05-21T16:46:33+00:00:210:12)
at Array.onSourceChange (https://babeljs.io/scripts/repl.js?t=2015-05-21T16:46:33+00:00:288:12)
at u (https://cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js:28:185)
que é exatamente o que eu gostaria do erro estendido.
Meu objetivo é estenderError
em uma variedade de subclasses e usá-los em bluebirdcatch
Coincidindo. Até agora, isso está falhando miseravelmente.
Por que a subclasse não está mostrando uma mensagem ou rastreamento de pilha?
Editar: usando a subclasse interna do Chrome (graças a @coder) funciona perfeitamente. Isso não é específico para Babel, necessariamente, como o exemplo a seguir (de@loganfsmyth no feed mais fofo de Babel) mostra:
// Works
new (function(){
"use strict";
return class E extends Error { }
}());
// Doesn't
new (function(){
"use strict";
function E(message){
Error.call(this, message);
};
E.prototype = Object.create(Error);
E.prototype.constructor = E;
return E;
}());