Skip to content

Instantly share code, notes, and snippets.

@matepaiva
Last active October 3, 2018 16:32
Show Gist options
  • Save matepaiva/f097331cd3ef35d3b23081d5423a83c7 to your computer and use it in GitHub Desktop.
Save matepaiva/f097331cd3ef35d3b23081d5423a83c7 to your computer and use it in GitHub Desktop.
Ensinando JS em português: Promises

PROMISES

<script src="https://gist.github.com/nisrulz/11c0d63428b108f10c83.js"></script>

{% gist 123456789 %}

Promises são uma maneira moderna de lidar com javascript assíncrono. Antes de existir as promessas, isso era feito por meio de callbacks.

Graças às Promises, temos agora uma forma mais semântica de lidar com isso. Em vez de dizer:

// comerComida é um callback de fazerComida, neste caso
prepararComida(ingredientes, comerComida)

podemos dizer:

prepararComida(ingredientes).then(comerComida)

Isso ajuda a tornar o código muito mais legível. Em uma sequência de ações conseguimos entender todo nosso fluxo:

  prepararComida(ingredientes)
    .then(comerComida)
    .then(escovarOsDentes)
    .then(lavarOsPratos)
    .then(sair)

Consegue imaginar isso sendo feito com callbacks? Seria bastante difícil de ler.

Tratamento de erros

Outra grande vantagem das Promises é que podemos tratar erros separadamente. Quando acontece um erro, ele sai do fluxo de "then" e cai em um "catch", que é onde você deverá pegar o erro e fazer algo com ele.

Usando o exemplo acima:

prepararComida(ingredientes)
  .then(comerComida)
  .then(escovarOsDentes)
  .catch(tratarErros)
  
function tratarErros (erro) {
  if (erro === 'Ingredientes acabaram') {
    irAoMercado()
  }
}

Exemplo real

É muito comum o uso de Promises ao se comunicar com banco de dados ou com aplicações externas (google maps, por exemplo). Queremos perguntar algo ao banco, aguardar a resposta e depois fazer algo com isso. Utilizando o exemplo real da aula de callbacks, podemos inserir aqui a nossa busca no banco de dados:

app.get('/tips', listarDicas)

function listarDicas (req, res) {
  // busque a lista de dicas no banco de dados de acordo com os filtros aplicados na requisição HTTP.
  bancoDeDados.Tips.find(req.query)
    // aqui está o resultado da busca
    .then(tips => {
      // responda a requisição com o resultado da busca
      res.json(tips)
    })
}

Entre neste link: https://scotch.io/tutorials/javascript-promises-for-dummies, leia tudo e então você entenderá melhor como funciona uma Promise. Eu prometo (sacou?)!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment