Manejo de errores simple Javascript

      Uno de los grandes problemas con javascript es el manejo de errores. Muchas veces uno se queda dando vueltas tratando de entender por que algo funciona y lo que sucede es que silenciosamente javascript falló y nadie se enteró de nada. O, en otros casos, una funcion nuestra que ejecutó JQuery falló y se ve el scope de jquery en version min y nos queremos cortar la sexualidad.

     Otras veces, con todas las funciones locas para agregar features de funcional, hay un gran nivel de indireccion y wrappeo de funciones, lo que lleva a un debug complicado.

    Por otro lados siempre es bueno tener el manejo de errores en un solo punto, después de todo DRY se aplica a todo, y los varios manejos de errores no traen mas que dolores de cabeza.

    En fin, siguiendo con la linea de pensamiento de orden superior podemos pensar en una funcion que se use en la definicion de las funciones que pueden tirar un error.

function e (fn, st) {
   if (st == null) st = alert;
   return function () {
        try {fn.apply(null, arguments)}
        catch (err) { st(err); }
   }
}

  Como bien se puede ver esta funcion devuelve la funcion metida adentro de un try catch definido y con una estrategia de manejo de error pasada por parametro y con alert como estrategia por defecto.

  Ahora con agregar un objeto tercero que maneje errores tenemos una definición robusta. 🙂

 Un ejemplo de uso puede ser

   var funcionManejada = e( function () { throw "ejemplo"}  );
   funcionManejada(); 



  Les prometo que si encuentro como bajar monadas felices a Jscript voy a hacer la versión monádica, que es todavía mas poderosa.

Ahora, como aplicamos esto a javascript orientado a objetos?
Se me ocurre velozmente una forma similar con el siguiente boceto

function ErrorMixin (object) {
    for(k in object){
     if(this.isMethod(object[k]) {
         object[k] = e(object[k]);
    }
  }
}

function objetito () {
   ErrorMixin(this);
   
}


Faltaria definir isMethod, que es una huevada pero no me acuerdo los strings 😛 Igual esta claro que este mixin es bastante pobre por que se aplica sobre todos los metodos del objeto. Se me ocurre tambien que podrían anotarse o podrían definirse con una expresion regular y alguna convencion adhoc.

Buep, enjoy your weekend my friend. Por mi lado me voy a escaviar y comer fondue a la farmacia

About santiagobragagnolo

Robotics obsessive, computer languages and cloud computing enthusiastic. Metadimensions walker.
This entry was posted in Error Management, highorder function, javascript, mixins and tagged , . Bookmark the permalink.

Leave a comment