2012-01-25 8 views
7

Sé que Chrome tiene un known bug que no conserva el stacktrace cuando vuelve a lanzar una excepción en Javascript.¿Hay alguna solución alternativa para volver a lanzar una excepción y conservar el stacktrace en Javascript?

tengo el siguiente código que se ejecuta en Chrome:

try { 
    try { 
     runCodeThatMayThrowAnException(); 
    } catch (e) { 
     // I'm handing the exception here (displaying a nice message or whatever) 
     // Now I want to rethrow the exception 
     throw (e); 
    } 
} catch (e) { 
    // The stacktrace was lost here :(
} 

¿Hay alguna manera de mantener el StackTrace? ¿Un complemento jQuery tal vez? ¿Alguna solución o idea?

+0

¿Puedo saber por qué eligió tener dos intentos ... atrapar? –

+0

Primero, porque necesito mostrar un buen mensaje al usuario en caso de que uno de los servicios no esté disponible. Estrellarse no es una opción. En segundo lugar, porque necesito enviar el contenido de la excepción javascript a algún lugar de mi back-end para saber exactamente lo que sucedió. Tal vez es un error y quiero solucionarlo antes de que el cliente me llame diciendo que el sitio no funciona. – rcarrillopadron

+0

¿Pero por qué un nivel de prueba ... atrapar no es suficiente? ¿Es porque quieres agregar todos los mensajes de error? –

Respuesta

4

En el último bloque catch tratar

throw e.stack; 

Y me refiero al último de ellos (el que va al navegador). Si anida su try/catch más profundo, necesitaría cambiar sus lanzamientos previos.

function throwError() { 
     var test = _undefined.propertyAccess; 
    } 
    try { 
     try { 
      try { 
       throwError(); 
      } catch (e) { 
       alert("exception: " + e.stack); 
       throw e; 
      } 
     } catch (e) { 
      console.log(e.stack); 
      throw e; 
     } 
    } catch (e) { 
     throw e.stack; 
    } 

Qué extraño error.

Cuestiones relacionadas