Voltar para o Blog

Promises no JavaScript: Conquistando a Assincronicidade 🚀

A assincronicidade é um dos conceitos mais importantes no JavaScript, principalmente ao lidar com operações como solicitações de rede, leitura de arquivos ou qualquer outra operação que possa levar algum tempo para ser concluída. Uma das ferramentas mais poderosas para lidar com a assincronicidade no JavaScript são as Promessas. Neste artigo, vamos explorar esse conceito a fundo.

Anúncio

Uma Promise no JavaScript é um objeto que representa uma operação que ainda não foi concluída, mas é esperada no futuro. Uma promessa é basicamente um recipiente para um valor que pode não estar disponível ainda, mas será em algum ponto no futuro, ou talvez nunca.

Para criar uma nova promessa, usamos o construtor Promise, que recebe uma função de executor como parâmetro. A função de executor é chamada imediatamente pelo construtor Promise e recebe duas funções como parâmetros: resolve e reject. A função resolve é chamada quando a operação assíncrona é concluída com sucesso, enquanto a função reject é chamada se houver um erro.

Vamos ver um exemplo:

const promise = new Promise((resolve, reject) => {  const operation = Math.random() > 0.5;  setTimeout(() => {    if (operation) {      resolve('Operação concluída com sucesso!');    } else {      reject(new Error('Houve um erro na operação.'));    }  }, 1000);});promise  .then(result => {    console.log(result);  })  .catch(error => {    console.error(error);  });

Neste exemplo, criamos uma nova promessa que resolve ou rejeita depois de um segundo, dependendo do resultado de uma operação aleatória. Se a operação for bem-sucedida, chamamos a função resolve com uma mensagem de sucesso. Se a operação falhar, chamamos a função reject com um objeto Error. Usamos o método then para lidar com o sucesso e o método catch para lidar com o erro.

É importante notar que uma promessa pode estar em um de três estados: pendente, resolvida ou rejeitada. Uma promessa é inicialmente pendente, depois pode ser resolvida com um valor ou rejeitada com uma razão (geralmente um erro). Uma vez que uma promessa é resolvida ou rejeitada, seu estado não pode ser alterado.

As promessas também têm um método finally que é chamado independentemente de a promessa ser resolvida ou rejeitada. Este método é geralmente usado para limpeza ou operações de finalização.

A partir do ES2017, o JavaScript também oferece as palavras-chave async e await para trabalhar com promessas de uma maneira mais legível e menos propensa a erros. Uma função marcada com a palavra-chave async sempre retorna uma promessa, e a palavra-chave await só pode ser usada dentro de uma função async. await pausa a execução da função até que a promessa seja resolvida ou rejeitada.

Aqui está um exemplo usando async e await:

const getOperationResult = () => {  return new Promise((resolve, reject) => {    const operation = Math.random() > 0.5;    setTimeout(() => {      if (operation) {        resolve('Operação concluída com sucesso!');      } else {        reject(new Error('Houve um erro na operação.'));      }    }, 1000);  });};const processOperation = async () => {  try {    const result = await getOperationResult();    console.log(result);  } catch (error) {    console.error(error);  }};processOperation();

Neste exemplo, temos uma função getOperationResult que retorna uma promessa. Em seguida, temos uma função async chamada processOperation que espera o resultado da promessa usando await e então lida com o resultado ou erro.

As Promessas, juntamente com async e await, são ferramentas incrivelmente úteis para lidar com a assincronicidade no JavaScript. Elas permitem escrever código assíncrono de forma quase idêntica ao código síncrono, tornando o código mais fácil de ler e entender.

Agora, se você está procurando aprofundar seus conhecimentos em JavaScript, não deixe de conferir o artigo: Map: Como a Programação Funcional pode Transformar seus Dados no JavaScript.

Anúncio

Bora pra cima 🦅

Post anterior Próximo post

Comentários (0)

Esse artigo ainda não possui comentários 😢. Seja o primeiro! 🚀🦅

Adicionar comentário