Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

301
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda