{% 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.
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()
}
}
É 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?)!