Gestione degli errori Javascript con try .. catch .. finally

Ho il sospetto che sto usando il finally blocco in modo non corretto, e che non riesco a capire i fondamenti del suo scopo…

 function myFunc() {
      try {
           if (true) {
                throw "An error";
           }
      } catch (e) {
           alert (e);
           return false;
      } finally {
           return true;
      }
 }

Questa funzione esegue la catch blocco, avviso di “errore”, ma poi ritorna true. Perche ‘non e’ return false?

InformationsquelleAutor nickf | 2008-11-13

 

3 Replies
  1. 84

    Infine il blocco contiene le istruzioni da eseguire dopo i blocchi try e catch ma prima di eseguire le istruzioni che seguono l’istruzione try…catch. Il blocco finally viene eseguito se non viene generata un’eccezione. Se viene generata un’eccezione, le istruzioni nel blocco finally viene eseguito anche se nessun blocco catch gestisce l’eccezione. più

    Il finally blocco funzionerà sempre, provate a tornare true dopo il try blocco

    function myFunc() {
         try {
             if (true) {
                   throw "An error";
              }
              return true;
         } catch (e) {
              alert (e);
              return false;
         } finally {
              //do cleanup, etc here
         }
     }
  2. 10

    Infine blocchi di eseguire quando si lascia il blocco try. Nel codice questo succede quando si ritorna false. Che imposta il valore restituito false e tentativi per uscire dalla funzione. Ma prima deve uscire il blocco try che innesca l’finalmente e sovrascrive il valore restituito è true.

    È da molti considerata una buona pratica di programmazione hanno una singola istruzione return per funzione. Prendere in considerazione di fare un var retval all’inizio della funzione e impostato a true o false come appropriato in funzione e quindi strutturare il codice in modo che cade correttamente attraverso un singolo ritorno in basso.

    • Utilizzando un unico valore di ritorno è un valido e utile strategia per risolvere il problema di semplificare l’intento di chiarezza e di funzioni. Utilizzando una variabile per memorizzare il valore di ritorno è anche un valido mezzo per risolvere complicati valore di ritorno di logica. Tuttavia, non credo che si può dire che più istruzioni return nella funzione automaticamente segno di cattiva pratica di programmazione. In molti casi, è bene: più semplice la scrittura del codice e chiaro i sistemi per il trasporto della funzione intento per il prossimo programmatore che ha bisogno di capire. function a(i) {if (i===undefined) {return;} ...}
    • Che ritorno economico al top è abbondantemente chiaro. Costringendo l’intera funzione di sedersi all’interno di un blocco non è necessario.
  3. 1
    function getTheFinallyBlockPoint(someValue) {
        var result;
        try {
            if (someValue === 1) {
                throw new Error("Don't you know that '1' is not an option here?");
            }
            result = someValue
        } catch (e) {
            console.log(e.toString());
            throw e;
        } finally {
            console.log("I'll write this no matter what!!!");
        }
    
        return result;
    };
    
    getTheFinallyBlockPoint("I wrote this only because 'someValue' was not 1!!!");
    getTheFinallyBlockPoint(1);

    Eseguire questo sul vostro browser della console e potrebbe darti la risposta che stai cercando.

Lascia un commento