Melhorando suas promessas no JavaScript

Há alguns dias eu publiquei sobre Async/Await, e acabou rolando uma discussão legal sobre o assunto, então vou retificar alguns pontos aqui, vou elucidar melhor outros e finalizar com algumas formas de escrever melhor suas promessas.

Retificações ao artigo anterior

O exemplo que passei

Sim, eu exagerei no exemplo do artigo anterior e aquilo foi proposital. Já estava com este artigo em produção e precisava explicitar a maneira com que já vi promessas sendo escritas e manipuladas no JS. Então fiquem tranquilos que veremos como melhorar aquelas promessas aqui.

Performance no Async/Await

O Guilherme Oliveira fez uma pergunta bem pertinente em seu comentário:

Hell yeah, ficou de fora este tópico, e na verdade há uma outra retificação aqui feita pelo Christian sobre a explanação do JS ser assíncrono que ficou melhor que a minha:

O que você provavelmente quis dizer foi que no javascript funções assíncronas não bloqueiam a execução por padrão; funções síncronas, por outro lado, executam de forma sequencial assim como na maioria das outras linguagens. Dá uma corrigida, esse tipo de afirmação ajuda a confundir os iniciantes.

Com base no texto acima, podemos deduzir que o Async/Await vai trabalhar diferente, aguardando a execução do método para prosseguir, e se usar ele para todo lado, vai cair no que o C# e outras linguagens síncronas oferecem. O certo mesmo é dar aquela ponderada!

Callback Hell e Promise Hell

O Bruno Assarisse retificou que as Promises vem justamente para resolver este problema de Callback Hell, estava errado no post anterior, me referi ao Promise Hell. Vamos ver alguns exemplos aqui.

Relembrando o exemplo anterior

O exemplo anterior que deixou muita gente indignada foi este abaixo, porém ele pode ser melhorado, e muito!

Promise Hell

Melhorando as Promessas

Vamos então melhorar este exemplo, encadeando as promessas.

Melhorando as Promesas

Este exemplo acima (Calma, não é o final), é um caso muito comum. Se notarmos, das linhas 4 a 9, temos um código bem mais elegante, porém perdemos a ordem das execuções, onde temos como resultado o seguinte:

node teste.js
2
5
6
4
3
1

Resolvendo o problema da ordem da execução

Durante a longa discussão no Facebook (Agradeço pelos comentários e dicas pessoal, foi muito válido para mim), o Guilherme de Souza escreveu este Gist abaixo, mostrando como resolver o problema (Exemplo final) da execução das promessas.

Conclusão e agradecimentos

Cada dia eu gosto mais de Node e da comunidade de Node, há tempos não tinha uma discussão boa assim, sinto falta disso nos grupos de ASP.NET. Aprendi muito com o post anterior e espero que se repita neste.