logo javascript

Aprenda javascript com facilidade do zero

Prof. Ivan Lourenço Gomes

Lidando com erros (Erros handling)

Quando estamos desenvolvendo uma aplicação web ou um software, temos que prever o surgimento de erros e lidar com eles para evitar que o funcionamento do nosso programa seja prejudicado.

Vamos voltar ao exemplo da última aula, em que tivemos um erro quando não utlizamos a função callback. Ao final vamos incluir também um novo comando.

                    

    function pegar_usuario(){

        window.setTimeout(function(){
            var u = {
                'nome': 'João'
            };
            return u;
        }, 1000);
        
    }
            
    function saudar_usuario(user) {
        console.log('Olá ' + user.nome + ', como vai?');
    }
            
    var user = pegar_usuario();
    saudar_usuario(user);
    
    console.log('Novo comando para executar ao final');

                    
                

Note que o erro faz com que o último comando que escrevemos ao final nem seja executado. Na verdade nenhum código depois do erro é executado, o que pode simplesmente quebrar o funcionamento da nossa página.

Para resolver isto, vamos lidar com os erros usando os comandos try e catch.

Try/Catch

O interpretador de Javascript tentará executar o código que está dentro do try. Caso não consiga, em vez de gerar um erro, ele executará o código que está dentro do catch.

                    

    try {
        var user = pegar_usuario();
        saudar_usuario(user);
    } catch {
        console.log('Olá, como vai?');
    }    
    
    console.log('Novo comando para executar ao final');

                    
                

Com o try/catch neste exemplo, além de criarmos uma alternativa para quando as informações do usuário não estejam disponíveis, o funcionamento do restante do código não foi afetado.

Caso quiséssemos ter a mensagem de erro, poderíamos passar um argumento na execução do catch. Este argumento pode ter qualquer nome, mas normalmente os programadores utilizam o nome "err".

                    

    try {
        var user = pegar_usuario();
        saudar_usuario(user);
    } catch(err) {
        console.log(err);
        console.log('Olá, como vai?');
    }    
    
    console.log('Novo comando para executar ao final');

                    
                

Finally

Após o try/catch, podemos também um finally, que será executado de qualquer maneira, havendo erro ou não.

                    

    try {
        var user = pegar_usuario();
        saudar_usuario(user);
    } catch {
        console.log('Olá, como vai?');
    } finally {
        console.log('Este comando será sempre executado');
    }


                    
                

Throw

O comando throw serve para gerar nossos próprios erros dentro da estrutura try/catch. Vamos ver um exemplo em que, a nível de código Javascript, não há nenhum erro, mas seria interessante criarmos um erro:

                    

    var user = {
        'nome': ""
    }

    try {
        saudar_usuario(user);
    } catch {
        console.log('Olá, como vai?');
    }

                    
                

Neste caso, nós já tínhamos as informações disponíveis, portanto não houve nenhum erro. Mas o nome estava vazio, o que gerou uma mensagem sem nome. Aqui é um exemplo onde poderíamos ter criado nosso próprio erro para um nome vazio:

                    

    function saudar_usuario(user) {
        console.log('Olá ' + user.nome + ', como vai?');
    }
            
    var user = {
        'nome': ""
    }

    try {
        
        if (!user.nome) {
            throw 'Nome em branco';
        } 
        
        saudar_usuario(user);
        
    } catch (err) {
        console.log(err);
        console.log('Olá usuário, como vai?');
    }

                    
                

Caso um throw seja executado dentro do try, o interpretador vai direto para o catch.

Índice de Aulas