ES6 - Async/Await

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. Com isso, transformamos uma…

ES6 - Async/Await


por: Tulio Faria

Categoria: Dicas
Thumbnail

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:

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!

Em:

Dicas