¿Cómo volver a lanzar una excepción en JavaScript, pero preservar la pila?

El seguimiento de la pila transmite una parte de los datos cada vez que se lanza una excepción. El seguimiento de la pila es una colección de todos los métodos utilizados en el programa. Comienza con el método que lanza una excepción y termina con el método que atrapa la excepción. En caso de que se vuelva a lanzar una excepción, el seguimiento de la pila se reinicia en el método actual. Por lo tanto, se pierde la lista de llamadas de métodos entre el método que lanza la excepción y el método actual. Una forma de evitar esto es capturar el error y almacenarlo localmente y luego volver a generar el error. Sin embargo, en JavaScript, no existe la función rethrow(). Así lanzamos que ocurrió el error original. Para comprender el contexto anterior, consulte el siguiente ejemplo.

Ejemplo 1: en una prueba de clase, se supone que Radha debe responder las preguntas que le hace el maestro. La maestra le da a Radha un número y le pregunta si el número dado es un número de día válido y, en caso afirmativo, especifica el día correspondiente. Si el número de día dado no es válido, Radha debe responder «Número de día no válido». Si ejecutamos el código, la página incrustada mostrará el seguimiento de la pila. Mostrará que el error se origina en el día() y luego se volvió a generar en el mes() y finalmente se detectó en el año(). Dado que 8 está fuera de límite, la salida se muestra como Día no válido.

Input: 8 
Output:Error originated in day() and was thrown
 Invalid day
 Error was caught and rethrown in month()
 Invalid day
 Error was finally caught in year()
 Invalid day
  • Programa:

    <!DOCTYPE html>
    <html>
      
    <head>
        <script>
            year();
              
            // For the year //
            function year() {
                try {
                    month();
      
                } catch (e) {
                    console.log(
    'Error was finally caught in year():', e.message);
                    alert(e.stack);
                }
            }
      
            // Fo the month //
            function month() {
                try {
                    day();
                } catch (e) {
                    console.log(
    'Error was then caught and rethrown in month():', e.message);
                    throw (e);
                }
            }
      
            function day() {
                var d = 8;
                var days = [
                  'Mon', 'Tue', 'Wed'
                  'Thurs', 'Fri', 'Sat', 'Sun'];
                try {
                    d = d - 1;
                    if (days[d] != undefined)
                        console.log("valid day:", days[d]);
                    else
                          
                        // Message is "Invalid day"
                        throw new Error("Invalid day"); 
                } catch (e) {
                    console.log(
    "Error originated in day() and was thrown:", e.message)
                    throw (e);
      
                }
            }
        </script>
    </head>
      
    <body>
        <h1>Welcome To Geeksforgeeks</h1>
    </body>
      
    </html>                        
  • Producción:
    Error originated in day() and was thrown:
     Invalid day
     Error was then caught and rethrown in month():
     Invalid day
     Error was finally caught in year():
     Invalid day

Ejemplo 2: El número 5 es un número de día válido, por lo tanto, no arroja ningún error. Por lo tanto, obtenemos la salida como un día válido.

Input: 5
Output:
valid day:
Fri
  • Programa:

    <!DOCTYPE html>
    <html>
      
    <head>
        <script>
            year();
      
            function year() {
                try {
                    month();
      
                } catch (e) {
                    console.log(
    'Error was finally caught in year()', e.message);
                    alert(e.stack);
                }
            }
      
            function month() {
                try {
                    day();
                } catch (e) {
                    console.log(
    'Error was caught and rethrown in month()', e.message);
                    throw (e);
                }
            }
      
            function day() {
                var d = 5;
      
                var days = [
                  'Mon', 'Tue', 'Wed'
                  'Thurs', 'Fri', 'Sat', 'Sun'];
                try {
                    d = d - 1;
                    if (days[d] != undefined)
                        console.log("valid day:", days[d]);
                    else
                        throw new Error("Invalid day");
                } catch (e) {
                    console.log(
    "Error originated in day() and was thrown:", e.message);
                    throw (e);
      
                }
            }
        </script>
    </head>
      
    <body>
        <h1>Welcome To Geeksforgeeks</h1>
    </body>
      
    </html>
  • Producción:
    valid day:
     Fri
  • Publicación traducida automáticamente

    Artículo escrito por PunijaChoudhary y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *