JS Async: async/await

JS Async: async/await

Publicado em

Esse post é o ultimo da série sobre JS Async, 3 posts para explicar e mostrar como trabalhar com dados assíncronos em JavaScript.

Você pode conferir os outros 2 artigos anteriores:

Hoje falaremos sobre o async/await e veremos alguns exemplos de como e o que podemos fazer com ele:

Async

A keyword async foi implementada na versão ES2017. Ela possibilita criarmos funções naturalmente assíncronas utilizando a seguinte notação:

1 async function myAsyncFunction() {}

Algo importante e ainda mais interessante acerca dessa implementação é que toda async function retorna uma Promise, significando que podemos utilizar todas as interfaces que já conhecemos no artigo sobre promises. Vejamos um exemplo para entender melhor:

1 2 3 4 5 6 7 async function myAsyncFunction() { return 'hello!'; } myAsyncFunction().then(payload => { console.log(payload); });

As funções async utilizam os valores de sucesso como os valores que vão ser dispostos dentro do pipeline .then na promise que vai ser retornada, em caso de necessitar exportar um erro, é necessário disparar um erro dentro do escopo de execução para ser enviado para o pipeline .catch, vejamos um exemplo:

1 2 3 4 5 6 7 async function myAsyncFunctionWithError() { throw new Error('ops!') } myAsyncFunctionWithError().catch(error => { console.log(error); });

Await

O uso do await é restrito apenas dentro de uma função declarada com a keyword async, basicamente o que ele faz é esperar o valor resposta de uma Promise ou converte o valor em uma Promise resolvida.

1 2 3 4 5 6 async function myAsyncFunction() { const payload = await { name: "felipe", age: 22}; console.log(payload); } myAsyncFunction();

Nos casos onde não estamos retornando nenhum valor da nossa função, a chamada de execução se mantém como as chamadas de funções normais sem o uso do .then.

Capturando erros com try/catch

await sempre espera o valor de sucesso da promise, logo não temos como capturar o erro diretamente, para fazer isso temos que fazer uso do try/catch que recebe o valor de reject se caso aconteça, dentro das promises que estão sendo executadas dentro do bloco try:

1 2 3 4 5 6 7 8 9 10 11 12 13 async function myAsyncErrorFunction(){ throw new Error("ops, something wrong happened"); } async function myAsyncFunction() { try { const response = await myAsyncErrorFunction(); } catch(error) { console.log(error); // ops, something wrong happened } } myAsyncFunction();

Executando esse bloco, o erro acontece dentro da promise myAsyncErrorFunction e é capturada dentro do bloco catch do try/catch.

Em resumo, o uso em conjunto das implementações fazem com que nosso código seja extremamente mais simples e legível, fazendo com que tratar dados assíncronos (ou síncronos) seja de forma mais direta e eficaz.

Espero que tenha gostado dessa pequena série, nos vemos nos próximo post!

🔭

Cover Image for JS Async: Promises

Esse post é o segundo de uma série de 3 posts para explicar e mostrar como trabalhar com dados assíncronos em JavaScript.

Cover Image for JS Async: Callbacks

Tratar padrões assíncronos fazem parte do dia a dia, seja por um timer, leitura de um arquivo ou uma request, etc, em algum momento você vai precisar manipular esses dados e é bem importante saber como trabalhar com eles e qual estratégia...