Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

303
Visualizações
Error de extensión en Javascript con sintaxis ES6 y Babel

Estoy tratando de extender Error con ES6 y Babel. No está funcionando.

 class MyError extends Error { constructor(m) { super(m); } } var error = new Error("ll"); var myerror = new MyError("ll"); console.log(error.message) //shows up correctly console.log(myerror.message) //shows empty string

El objeto Error nunca recibe el conjunto de mensajes correcto.

Prueba en Babel REPL .

Ahora he visto algunas soluciones en SO ( por ejemplo, aquí ), pero todas parecen muy diferentes a ES6. ¿Cómo hacerlo de una manera agradable, ES6? (Eso es trabajar en Babel)

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Según la respuesta de Karel Bílek, haría un pequeño cambio en el constructor :

 class ExtendableError extends Error { constructor(message) { super(message); this.name = this.constructor.name; if (typeof Error.captureStackTrace === 'function') { Error.captureStackTrace(this, this.constructor); } else { this.stack = (new Error(message)).stack; } } } // now I can extend class MyError extends ExtendableError {} var myerror = new MyError("ll"); console.log(myerror.message); console.log(myerror instanceof Error); console.log(myerror.name); console.log(myerror.stack);

Esto imprimirá MyError en la pila, y no el Error genérico.

También agregará el mensaje de error al seguimiento de la pila, que faltaba en el ejemplo de Karel.

También usará captureStackTrace si está disponible.

Con Babel 6, necesita transform-built-in- exten ( npm ) para que esto funcione.

over 4 years ago · Santiago Trujillo Relatório

0

Combinando esta respuesta , esta respuesta y este código , he creado esta pequeña clase de "ayuda", que parece funcionar bien.

 class ExtendableError extends Error { constructor(message) { super(); this.message = message; this.stack = (new Error()).stack; this.name = this.constructor.name; } } // now I can extend class MyError extends ExtendableError { constructor(m) { super(m); } } var myerror = new MyError("ll"); console.log(myerror.message); console.log(myerror instanceof Error); console.log(myerror.name); console.log(myerror.stack);

Probar en REPL

over 4 years ago · Santiago Trujillo Relatório

0

Para finalmente poner esto a descansar. En Babel 6 es explícito que los desarrolladores no soportan la extensión desde la versión integrada. Aunque este truco no ayudará con cosas como Map , Set , etc., sí funciona para Error . Esto es importante ya que una de las ideas centrales de un lenguaje que puede generar una excepción es permitir errores personalizados. Esto es doblemente importante ya que las Promesas se vuelven más útiles ya que están diseñadas para rechazar un Error .

La triste verdad es que aún necesita realizar esto a la antigua en ES2015.

Ejemplo en Babel REPL

Patrón de error personalizado

 class MyError { constructor(message) { this.name = 'MyError'; this.message = message; this.stack = new Error().stack; // Optional } } MyError.prototype = Object.create(Error.prototype);

Por otro lado, hay un complemento para Babel 6 que permite esto.

https://www.npmjs.com/package/babel-plugin-transform-builtin-extend

Actualización: (a partir del 29 de septiembre de 2016) Después de algunas pruebas, parece que babel.io no tiene en cuenta correctamente todas las afirmaciones (que se extienden desde un error extendido personalizado). Pero en Ember.JS, el error de extensión funciona como se esperaba: https://ember-twiddle.com/d88555a6f408174df0a4c8e0fd6b27ce

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda