Agora temos o nosso jogo feminino simples e envelhecido juntos.
Se um usuário clicar no botão mais de cinco vezes, consideraremos que ele tenha um.
Caso contrário, eles perderam.
Então o jogo definitivamente funciona como está agora.
Mas eu comecei a fazer esse caso no final da última seção que talvez a forma como
escrevemos este jogo não fosse a melhor do mundo.
Eu joguei fora o caso em que poderíamos querer deixar algum outro desenvolvedor executar este jogo.
Bem, bem, como poderíamos querer publicar essa coisa como uma função ou como um pacote independente.
Assim, outro desenvolvedor poderia executar o jogo e, em seguida, precisaríamos permitir que eles especificassem o que
fazer sempre que o usuário concluísse ou falhasse com êxito o jogo.
Então, pensar sobre isso do ponto de vista do diagrama é o que estou sugerindo.
Estou dizendo que quero ter exatamente a mesma experiência de jogo, mas quero envolver toda a lógica
do jogo em uma única função representada por esse tipo de plano de fundo azul ou ciano.
Eu então quero permitir que outro desenvolvedor venha iniciar o jogo e especificar exatamente o que deve
acontecer se o usuário for bem-sucedido no jogo ou falhar no jogo.
Então, em outras palavras, eu quero refatorar nossa atual base de código de tudo o que representa este jogo
em uma única função que pode ser chamada onde outro desenvolvedor pode especificar o que fazer depois que o
jogo é jogado.
Então vamos fazer este refator.
E então, à medida que vamos, vamos apresentar o tópico das promessas e descobrir como elas funcionam.
Então eu meio que volto para o meu código e só para começar vamos fazer um
pouco de refatoração para primeiro colocar todo o nosso jogo em uma função autônoma.
Então, no topo, abaixo da tag do script, eu vou declarar uma função chamada game do começo.
Vou colocar uma chave de abertura.
Eu vou pegar toda a minha lógica de jogo.
Eu vou recuar uma vez e vou fechar essa chave.
Aqui embaixo, no fundo, agora todo o meu jogo está envolvido dentro desse começo.
Função do jogo.
Então agora meio que consegui colocar toda a minha lógica de jogo em uma função autônoma, mas essa função
autônoma ainda encapsula o que fazer no caso de sucesso e falha apenas para garantir que
tudo funcione adequadamente.
Vou adicionar uma chamada para iniciar o jogo abaixo da declaração da função.
Então aqui embaixo eu vou ligar para o jogo assim.
E agora, de volta ao Chrome, vamos atualizar o documento e garantir que tudo continue funcionando.
Então aqui estamos todos a atualização vai esperar os dois segundos e tudo OK para o
jogo ainda funciona como eu esperava.
Então, o nosso código, tal como está agora, você sabe que ainda funciona, mas não estamos fornecendo uma interface legal
para qualquer outro desenvolvedor que queira chamar o start game.
Esse é o objetivo todo aqui.
Eu quero de alguma forma especificar o que fazer quando o usuário ganha.
Sempre que eu chamo o start game, então vamos introduzir a idéia de promessas agora prometidas.
Expliquei aos desenvolvedores muitas vezes e em todas as vezes que expliquei exatamente como os
processos se comportam.
Descobri exatamente que uma coisa que lhe diz como funciona não transmite conhecimento sobre
promessas.
Em outras palavras, posso sentar aqui e fazer palestras o dia todo sobre o que uma promessa faz, mas ela não traduz completamente.
Você realmente tem que ver essas coisas em ação.
Então aqui está o que vamos fazer.
Em vez de me sentar aqui e falar sobre promessas sem parar, vamos apenas refatorar nosso código para fazer uso
de uma promessa e, assim que o fizermos, uma vez que o tenhamos feito, faremos algumas
observações sobre exatamente como trabalho.
ESTÁ BEM.
Então vamos fazer o reator primeiro.
Vai ser um pouco misterioso, mas depois vamos falar exatamente como está funcionando.
Então, para refatorar nosso código para usar promessas, vou começar excluindo toda a instrução interna de tempo limite e a única razão
pela qual estou excluindo é porque quero escrever essa coisa do zero
para ter certeza de que é realmente claro você exatamente o que está acontecendo.
Então, em lugares que definem o tempo limite, vou escrever uma nova promessa e anotar que estou usando uma letra
maiúscula aqui.
Vou então passar essa função de promessa ou essa coisa de promessa, o que quer que seja aqui uma função
de flecha gorda.
ESTÁ BEM.
Então eu acabei de passar uma gordura ou uma função assim.
Sempre que eu declaro uma nova promessa, essa função interna que eu passo para ela é chamada
com dois argumentos, resolver e rejeitar.
Agora dentro, se você vai colocar exatamente a mesma lógica, ou praticamente a mesma, que nós tivemos antes
com o tempo definido, eu direi set.
Tempo esgotado.
Vou passar uma função como segundo argumento.
Eu direi 2000 milissegundos.
Então, dentro do tempo limite definido, podemos dizer se o contador é maior que 5 e aqui é onde
as coisas ficam interessantes ao invés de dizer algo sobre alerta ou qualquer coisa assim, eu vou olhar para
este argumento.
Este argumento de resolução eu vou chamá-lo novamente.
Eu sei que estou lançando uma tonelada de código que parece misteriosa, mas carrega comigo.
Vamos concluir a implementação aqui e depois falar exatamente sobre o que está acontecendo agora nas instruções L,
como é o caso em que um usuário falha.
Eu pretendia adicionar um telefonema para rejeitar Agora um último pouquinho.
Um último pouquinho aqui embaixo na parte de baixo, onde eu chamo de start game novamente ou movo
o ponto-e-vírgula no final e ao invés disso vou substituí-lo por um novo ponto de linha.
Então eu vou passar então uma função dentro da qual eu irei te alertar quando e depois uma última coisa.
Menos uma coisa lá comigo.
O fundo mesmo.
Depois disso, vou adicionar uma captura e avisá-lo perdido.
OK, então muitas mudanças que acabamos de fazer muitas mudanças e chances são muito estranhas.
Totalmente bem.
Totalmente o que eu espero.
Vamos primeiro executar isso dentro do nosso navegador e verificar se tudo funciona e falaremos exatamente sobre o
que está acontecendo aqui.
Então, vamos garantir que primeiro salve o documento para que tudo seja salvo.
Vai voltar para o Chrome ou atualizar o documento ou clique no botão.
Bem, eu acho que não cozinhei e o suficiente porque eu te vi pela última vez.
Vamos pegar um caso vencedor aqui.
Clique clique clique e você ganha.
Lembre-se que para reiniciar o jogo você precisa atualizar a atualização do navegador.
Clique clique clique e eu ganho.
ESTÁ BEM.
Então, claramente, alguma coisa está funcionando bem aqui.
Claramente algo está funcionando ainda, mas o que diabos é essa coisa de promessa.
O que é isso resolvido e rejeitar o que é esta van e não pegar na parte inferior.
Vamos dar uma pausa rápida.
Vamos voltar a falar exatamente sobre como as promessas funcionam e, em seguida, terminaremos com a atualização
das promessas.
Apenas mais uma seção será toda envolvida com nossa atualização.
ESTÁ BEM.
Vejo você em um segundo.