Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] Excepción de más. Suceso paranormal hasta que se demuestre lo contrario.

Estas en el tema de Excepción de más. Suceso paranormal hasta que se demuestre lo contrario. en el foro de Javascript en Foros del Web. Buenas, Estoy trabajando en un código Javascript en el cual necesito validar ciertos objetos comprobando que tengan unas propiedades y sólo esas propiedades concretas. Se ...
  #1 (permalink)  
Antiguo 14/01/2014, 07:30
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Excepción de más. Suceso paranormal hasta que se demuestre lo contrario.

Buenas,

Estoy trabajando en un código Javascript en el cual necesito validar ciertos objetos comprobando que tengan unas propiedades y sólo esas propiedades concretas. Se trata de estos objetos:

{ 'action': ... }, { 'else': ... }, { 'if': ... }, {'if': ... , 'else': ... }, { 'while': ... }

Para ello tengo un método Compiler.prototype.detectOperation() que lanza una excepción si el objeto no cumple esos requisitos. Sin embargo, cuando el objeto no es válido, a parte de la excepción programada por mi, lanza otra más y no logro saber de donde viene. Aquí dejo el código:
http://jsfiddle.net/dWxjA/
Código Javascript:
Ver original
  1. function Compiler(){}
  2.  
  3. Object.defineProperty( Compiler.prototype, 'options', {
  4.     value: { 'action':0, 'else':0, 'if':0, 'while':0 }
  5. });
  6.  
  7. Compiler.prototype.detectOperation = function( operation ){
  8.     var keys = [];
  9.     if       ( typeof operation === 'function' ) {
  10.         return 'calculation';
  11.     } else if( typeof operation ===  'object'  ) {
  12.         keys = Object.keys( operation );
  13.         if       ( keys.length === 1 ) {
  14.             if( keys[0] in this.options )
  15.                 return keys[0];
  16.         } else if( keys.length === 2 ) {
  17.             keys = keys.sort();
  18.             if( keys[0] === 'else' && keys[1] === 'if' )
  19.                 return 'ifelse';
  20.         }
  21.     }
  22.     var error = 'operation{ ' + keys[0];
  23.     for( var i = 1; i < keys.length; ++i )
  24.         error += '-' + keys[i];
  25.     error += ' } is not allowed operation';
  26.     console.log( error );
  27.     throw console.error( error );
  28. }
  29.  
  30. var comp = new Compiler();
  31. var op = comp.detectOperation( { 'if': 0, 'elue': 2  } );
  32. console.log( 'eo' );
  33. console.log( op );

Me lanza la excepción que he programado:
Código BASH:
Ver original
  1. operation{ elue-if } is not allowed operation
pero también ésta:
Código BASH:
Ver original
  1. Uncaught undefined

No es un error que me impida seguir con lo que estoy haciendo pero me tiene mosca no conseguir saber de donde proviene. A ver si alguien sabe explicármelo.

Un saludo y gracias!
__________________
github.com/xgbuils | npm/xgbuils

Última edición por Pantaláimon; 14/01/2014 a las 08:22
  #2 (permalink)  
Antiguo 14/01/2014, 08:37
Avatar de Aijoona
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Buenos Aires
Mensajes: 779
Antigüedad: 12 años, 11 meses
Puntos: 343
Respuesta: Excepción de más. Suceso paranormal hasta que se demuestre lo contrario.

throw console.error( error );

Estás logeando el error, y throweando el resultado de la operación (console.error( error ) tiene como resultado undefined).
__________________
blog | @aijoona
  #3 (permalink)  
Antiguo 14/01/2014, 09:55
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 9 meses
Puntos: 32
Respuesta: Excepción de más. Suceso paranormal hasta que se demuestre lo contrario.

Vaya, esto me pasa por aprender por imitación. Abrí la primera entrada que me salió en google, vi que había algo del estilo throw console.error( ... ) y lo usé.

Gracias!
__________________
github.com/xgbuils | npm/xgbuils

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:31.