Acabamos de saber sobre o Callback Hell e
como as promessas podem nos permitir superar esse problema.
Sabemos que o driver do nó MongoDB suporta nativamente promessas.
Então, se você não especificar um retorno de chamada,
as chamadas para suas funções retornarão promessas.
Então, vamos atualizar nosso aplicativo para fazer uso de promessas para
evitar a questão do inferno callback que acabamos de aprender na palestra anterior.
Voltando ao nosso aplicativo,
novamente dando mais uma olhada na razão pela qual o inferno de retorno se desenvolveu em nosso código.
Note que aqui quando implementamos as operações,
temos uma operação e, em seguida, dentro do callback dessa operação,
então precisamos iniciar a próxima operação e dentro
do callback dessa operação estamos iniciando a próxima operação e assim por diante.
Então você está terminando com esta pirâmide como estrutura aqui.
Uma operação dentro do retorno de chamada de outra e dentro do callback.
Agora, este código logo vai ficar difícil e complicado de entender.
Então é por isso que queremos transformar este código usando
o suporte de promessa que Mongo DB Driver já
nos fornece para que possamos usar promessas em vez de
usar as funções de retorno de chamada como fizemos neste exercício.
Claro, eu fiz a versão anterior apenas para ilustrar para vocês como podemos
pousar com o inferno callback e como podemos usar promessas para superar esse problema.
Então, antes de atualizar o arquivo index.js,
deixe-me ir para o arquivo operations.jsfile e, em seguida, vamos atualizar isso primeiro.
Então aqui, você vai notar que quando estamos chamando esta função aqui,
estamos passando no segundo parâmetro que é uma função de retorno de chamada aqui.
Então, porque vamos usar promessas aqui.
Então eu vou apenas excluir essa função de retorno de chamada e, em seguida,
uma vez que esta chamada para a inserção vai de qualquer maneira retornar promessas,
eu só vou retornar a promessa desta função.
Então, observe como o código ficou simplificado.
Da mesma forma para o segundo,
vou simplesmente remover essa função de retorno de chamada e,
em seguida, retornar a promessa que está
sendo retornada por isso e, em seguida, vamos lidar com isso no código em index.js.
Da mesma forma para o excluir um também,
eu vou remover o retorno de chamada e, em seguida, retornar esse acidente e também para uptade.
Para atualização, vamos remover o retorno de chamada que demos
aqui e, em seguida, retornar a promessa.
Então, desta forma, todas essas quatro funções vão
ser retornando a promessa que já é retornada
por essas chamadas para as funções do driver MongoDB.
Agora, uma vez que tenhamos concluído isso,
vamos voltar para index.js.
Em index.js, vou atualizar novamente esta função aqui.
Então, usando promessas vai dizer MongoClient.connect (url) e, em seguida,
vamos substituir isso dizendo “então” e isso recebe apenas o banco de dados como seu parâmetro.
E aqui dentro, vamos lidar com o resto e também podemos
fazer notar que esta função particular fecha o “Então” aqui e a promessa,
a segunda parte da promessa,
podemos lidar com o erro.
Podemos dizer consolelog.
Assim, podemos usar a captura da promessa também para capturar os erros.
Então, dessa forma, pegamos os erros.
Agora, vamos melhorar o código aqui dentro.
Então, dentro aqui estamos fazendo DB operação inserir documento,
e em vez de chamar esta função aqui,
o que eu vou fazer é transformar isso no “então” aqui.
Então eu vou fechar isso e dizer. Então resultado.
Então, dentro desses resultados,
vamos imprimir o registro do console e, em seguida,.
Então eu vou fechar isso aqui e então vamos
fechar o “então” aqui e então
isso será anexado novamente a um “então” aqui.
Então você vê que eu estou encadeando dois “thens”
um no outro aqui e, em seguida, dentro de nós, então,
vamos fazer um log de console e, em seguida, vamos fazer um retorno da próxima operação.
Mas então, para esta operação,
eu vou fechar isso e fechar isso
então e então essa chamada novamente agora
será tratada dentro de uma função “então” aqui.
Então note como você tem a primeira função e no “então” estamos chamando
o dboper encontrar documentos e que retornará e isso retornará uma promessa.
Essa promessa será cumprida por isso.
Então estamos acorrentando dois thens juntos e então novamente encadeando mais um “então” aqui.
Deixe-me reinventar o código aqui e então vamos retornar isso aqui e
isso novamente vai fechar e fechar que “então”
e então isso fica fechado dentro do próximo “então” e
vamos chamar a próxima função aqui “que
db.dropCollection ('Pratos' e fechar “isso então” e o próximo aqui.
Vamos lidar com o “então” do resultado aqui.
Retornar dbclose e todos
estes aqui podem ser removidos agora porque eles não são mais necessários.
E então, finalmente, se houver um erro vai pegar o erro esta função.
Então eu só vou copiar isso e depois colá-lo aqui. É isso.
Com essa mudança agora,
seu código é muito mais fácil de lidar aqui.
Então, como você pode ver,
você tem o mongoClient.connect que
retorna uma promessa e dentro da manipulação dessa promessa,
eles estão chamando esses métodos e um após o outro eles estão
retornando a promessa e, em seguida, você está encadeando-os usando o.
Esta estrutura de acordes é muito mais fácil de seguir do que o que tínhamos implementado anteriormente.
Então, usando promessas que literalmente virou e, em seguida, evitou
o inferno de retorno de chamada que vimos na versão anterior deste aplicativo.
Então vamos salvar as alterações para ambos
index.jsn.operation.js e, em seguida, dar uma olhada neste aplicativo.
Novamente indo para o terminal,
no prompt digite “npm
start” e você verá que seu aplicativo é executado exatamente como antes,
ele insere o documento, localiza o documento,
atualiza o documento e, em seguida,
localiza o documento atualizado e, em seguida, fecha o banco de dados do ato.
Então, usando promessas nós reestruturamos o código para ser muito mais fácil e
evitamos o inferno de retorno de chamada que vimos na versão anterior deste aplicativo.
Com isso, completamos este exercício.
Neste exercício, vocês viram como podemos fazer uso
de promessas para evitar o inferno callback.
Este é um bom momento para você fazer um git commit com
a mensagem callback inferno e promessa.