Por que converter callbacks em promises? Todos sabemos que as callbacks tiveram (e ainda tem) um papel muito importante na história do JavaScript/Node.JS.

Nós também sabemos o quão complicado é ler e dar manutenção a um código que abusa do conceito de callbacks para fazer processamento assíncrono.

O ES6 veio para facilitar muito nossa vida com vários recursos interessantes, e um deles é o async/await que já resolve boa parte dos nossos problemas de assincronismo.

No entanto, muitas bibliotecas tanto no navegador, quanto no Node.JS ainda usam callbacks, nos “forçando” a trabalhar dessa forma.

Por que devo converter callback em promise?

Mas por que devo converter um callback em promise?

Sabe quando sua função não foi chamada na hora certa? Ou então quando ela não está te devolvendo o resultado na ordem em que você esperava?

Esses podem ser sinais de que você está tendo algum problema com callbacks e dessa forma as promises tornam-se uma ótima opção.

Exemplo com callback

Exemplo com callback
Exemplo com callback

De antemão, devemos observar algumas coisas no print acima. Nós temos um arquivo exemplo.txt que só tem um texto e temos outro arquivo index.js que contém nosso código.

Entendendo o código

Criamos uma função chamada lerArquivo, essa função recebe o caminho até o arquivo e uma função callback, que por sua vez recebe o resultado e mostra o mesmo na tela.

Até ai tudo bem, o nosso exemplo funciona. Mas ocasionalmente, nós precisaremos executar um determinado código em ordem como no exemplo abaixo:

Código callback com sequência incorreta
Código callback com sequência incorreta

Você percebe que nesse sentido, nosso código não está funcionando como deveria?

Esse problema pode ser facilmente resolvido transformando a callback “mostrarResultado” em uma promise.

Transformando em promise

Convertendo callback em promise
Transformando callback em promise

Anteriormente, tínhamos um código onde usamos callbacks e enfrentamos um “problema” onde o resultado sempre era resolvido por último.

Finalmente, logo após a refatoração, conseguimos resolver esse problema. Por outro lado, agora, nós retornamos uma promise e com isso podemos usar a palavra reservada await para esperar o resultado e assim fazer uso dele no momento certo.

Conclusão e avisos

Como resultado, ao final desse artigo, você aprendeu como é simples converter callbacks em promises.

Você pode usar do conhecimento adquirido aqui em qualquer outro tipo de cenário, como por exemplo deixar assíncrona funções de libs que ainda usam callbacks.

Promisefy

Definitivamente, essa não é a única forma de fazer esse tipo de transformação, existe um módulo nativo do nodejs, promisefy, que faz esse trabalho. Dessa forma, cabe a você decidir o que melhor se encaixa no seu projeto.

Leia também

Como fazer o efeito de máquina de escrever com React.JS

Como obter ajuda no terminal do Linux

Configurando Servidor WildFly e Fazendo Deploy – Windows