JavaScript try…catch…finally

Resumo : neste tutorial, você aprenderá como usar a try...catch...finallyinstrução JavaScript para capturar exceções e executar um bloco, independentemente de as exceções ocorrerem ou não

Introdução à instrução JavaScript try…catch…finally

A try...catchinstrução permite capturar exceções e tratá-las normalmente. Às vezes, você deseja executar um bloco, independentemente de ocorrerem exceções ou não. Nesse caso, você pode usar a try...catch...finallyinstrução com a seguinte sintaxe:

try {
  // code may cause exceptions
} catch (error) {
  // code to handle exceptions
} finally {
  // code to execute whether exceptions occur or not
}
Linguagem de código:  JavaScript  ( javascript )

Nesta sintaxe, o finallybloco sempre é executado após a conclusão trydos catchblocos e e independentemente de ocorrerem exceções ou não.

O fluxograma a seguir ilustra como try...catch...finallyfunciona:

JavaScript tente...pegue...finalmente

Exemplo de instrução JavaScript try…catch…finally

O exemplo a seguir ilustra como usar a try...catch...finallyinstrução:

let result = 0;
try {
  result = add(10, 20);
} catch (e) {
  console.log(e.message);
} finally {
  console.log({ result });
}Linguagem de código:  JavaScript  ( javascript )

Saída:

add is not defined
{ result: 0 }Linguagem de código:  CSS  ( css )

Como funciona.

Primeiro, declare a resultvariável e inicialize seu valor com 0.

let result = 0;Linguagem de código:  JavaScript  ( javascript )

Segundo, chame a add()função e atribua o valor de retorno à resultvariável no trybloco. Como a add()função não existe, o mecanismo JavaScript gera uma exceção.

Por causa da exceção, a instrução no catchbloco é executada para mostrar a mensagem de erro.

Terceiro, envie resultpara o console no trybloco.

No exemplo a seguir, definimos a add()função e a chamamos no trybloco:

const add = (x, y) => x + y;

let result = 0;

try {
  result = add(10, 20);
} catch (e) {
  console.log(e.message);
} finally {
  console.log({ result });
}
Linguagem de código:  JavaScript  ( javascript )

Saída:

{ result: 30 }Linguagem de código:  CSS  ( css )

Como a add()função existe, nenhuma exceção ocorre no trybloco. Portanto, o finallybloco gera o valor da resultvariável, que é a soma de 10e 20.

Em ambos os exemplos, o finallybloco sempre é executado.

tente…pegue…finalmente e retorne

O finallybloco sempre é executado independentemente de ocorrerem exceções ou não. Além disso, você não pode fazer nada para impedir sua execução, incluindo o uso de uma returninstrução. Por exemplo:

function fn() {
  try {
    return 1;
  } catch {
    return 2;
  } finally {
    return 3;
  }
}

console.log(fn());
Linguagem de código:  JavaScript  ( javascript )

Saída:

3

Neste exemplo, a returninstrução no trybloco retorna 1. Portanto, a fn()função deveria ter retornado 1. No entanto, não é o caso.

Como o finally bloco sempre é executado, a returninstrução no finallybloco retorna 3. Portanto, a fn()função retorna 3.

Em outras palavras, as returninstruções nos blocos trye catchsão ignoradas na try...catch...finallyinstrução.

Resumo

  • Use a finallycláusula na try...catch...finallyinstrução para executar um bloco, independentemente de ocorrerem exceções ou não.
  • A try...catch...finallyinstrução ignora a returninstrução nos blocos trye catchporque o finallybloco sempre é executado.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *