ES6 - Async/Await

ES6 - Async/Await

Tulio Faria
Tulio Faria5 de maio de 2017
Olá! Neste post, falo sobre o Async/Await, uma funcionalidade que vem com o ES6 e é possível ser utilizada no Node, permitindo o aumento da qualidade do nosso código. Obs: A versão do Node que estou rodando é a 7.7.3. O Async/Await, assim como um generator, depende de uma promise para funcionar.

const fs = require('fs') const readFilePromise = (filename) => new Promise((resolve, (reject = {})))

Com isso, transformamos uma função callBack, que segue a forma do Node tradicional, em uma promise, criando uma Arrow Funciton Filename, que retornará uma new Promise, passando uma nova Arrow Function para ela com resolve e reject.
Como fazemos isso?
Chamaremos então um readFile comum no Node, passando o nome do arquivo desejado. Em seguida, recebemos o callBack passando uma arrow function e, caso existir um erro e não for vazio, ele irá rejeitar e envia esse erro. Caso tenha dado tudo certo, será enviado o data para o solicitante:

const fs = require('fs') const readFilePromise = (filename) => new Promise((resolve, reject = { fs.readFile(filename, (err, data) => { if(err){ reject(err) } else { resolve(data) } } }))

Com o Arrow Function, fica muito mais simples como vocês podem ver. Para verificarmos se esta tudo OK fazemos:

readFilePromise('arquivo.js').then((data) => console.log(data.toString()))

Depois de testado, vamos lá. Crie uma function que terá um Async, ele irá ler o conteúdo do arquivo, e este arquivo vai ter um Await que lerá o arquivo.js:

async function read() { const contents = await readFilePromise('arquivo.js') console.log(contents.toString()) }

Quando o código for executado, ele vai chegar até o await e vai parar até a promise ser resolvida, então vai retornar o que tiver dentro do arquivo para dentro do contents.
Para que serve?
Com isso, podemos, por exemplo, ler 2 arquivos seguidos apenas adicionando um novo Await no código. Dois detalhes importantes: 1. Se formos usar o Await dentro de uma função, eu tenho que marcar esta function como Async. 2. Caso haja uma rejeição da promise, o node irá retornar o erro, mas com o código quebrado, com isso temos uma maneira correta de checar os erros com o Async/Await, usando o try catch:

try { async function read(){ const contents = await readFilePromise ('arquivo.js') console.log(contents.toString()) } catch(e){ console.log('erro', e) } }

Conclusão Uma coisa que percebemos muito nessa evolução do javaScript é que está ficando cada vez mais fácil de escrever código assincrono, que realmente era o calcanhar de Aquiles da linguagem, pois temos callBack hell e vários outros erros, atrapalhando a qualidade do código, então essas features novas que vem sendo adicionadas simplifica muito nossa forma de construir códigos.
Confira o vídeo:
D01xWkT2W7c
Assistir vídeo
Curta o DevPleno no Facebook, inscreva-se no canal e não se esqueça de cadastrar seu e-mail para não perder as novidades. Ah, fique à vontade para deixar suas dúvidas e sugestões nos comentários. Abraço!
Tulio Faria
Autor
Tulio Faria5 de maio de 2017

Últimas do Blog