Blog / Javascript

Promisify-Node: Convertendo funções clássicas do Node em Promises

TTulio Faria 04 de mai. de 2017 2 min de leitura
Promisify-Node: Convertendo funções clássicas do Node em Promises

Neste post, vamos fazer um hands-on do Promisify-Node, uma forma de converter as funções clássicas do Node em JavaScript que retornam callback em promises. Existem vários módulos que já fazem isso, como em módulos utilitários de promises, o q, bluebird, por exemplo.

Então por que usar o Promisify-Node?

Ele tem uma funcionalidade bastante relevante que vou mostrar durante o hands-on, vamos lá. Para instalar e adicionar como dependência o Promisify-Node:

yarn add promisify-node

Vamos importar o promisify e o fs(file system) para termos uma função com o callBack.

const promisify = require('promisify-node')
const fs = require('fs')

Se fossemos utilizar o fs normalmente, iriamos fazer o seguinte:

fs.readFile('arquivo.js', (err, data) => console.log(data.toString()))

Então ele retorna um callBack, onde eu consigo escrever o conteúdo do arquivo. Então vamos converter essa função em promise para, por exemplo, usar o then dentro de um generator ou com async/await.

Podemos pegar essa função fs.readFile, criar uma nova readFile e passar para promisify, assim:

const readFile = promisyfy(fs.readFile)

Qual a diferença?

Agora eu posso chamar a readFile, falar qual arquivo eu quero (no caso o arquivo.js) e chamar ele no modo promisify.

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

Qual a vantagem?

Além da promisify ser mais fácil de manipular, evitamos o callback hell ou código hadouken, que faz uma barrigona de tanto callback que tem um dentro do outro.

Também podemos utilizar com generator e com async/await. Outra coisa legal é que, se quisermos usar todas as funções do fs como uma promise, podemos mudar o Const fs = require(‘fs’) assim:

const fs = promisify('fs')

E, assim, qualquer função que eu for utilizar, como por exemplo:

fs.readFile('arquivo.js', (err, data) => console.log(data.toString()))

Já irá virar naturalmente uma promise, com isso posso fazer:

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

Convertendo todos os métodos e funções disponíveis dentro desse módulo, de callback para promise.

Concluindo

Ainda estamos usando o fs.readFile, mas em uma versão ‘promisifiada’ :) Isso é bastante poderoso, afinal assim podemos converter um módulo inteiro, de callback para promise utilizando generator ou async/await tranquilamente.

Você também pode conferir o passo a passo desse hands-on por vídeo:

Fique à vontade para deixar suas dúvidas e sugestões nos comentários. 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. Abraço!

T
Escrito por
Tulio Faria

Mestre em Sistemas de Informação pela USP e criador do DevPleno. Iniciou sua carreira como professor com apenas 18 anos em um curso técnico, foram 11 anos em sala de aula formando desenvolvedores fullstack no sul de Minas Gerais.

JavascriptFundamentosNodeJS
Compartilhar X LinkedIn
Continue lendo

Insights relacionados