﻿1
00:00:01,210 --> 00:00:02,880
‫Instrutor: Agora vamos realmente começar

2
00:00:02,880 --> 00:00:05,783
‫a aprender como resolver o inferno de callback usando promessas.

3
00:00:07,430 --> 00:00:09,750
‫E vamos começar usando uma promessa para a

4
00:00:09,750 --> 00:00:11,260
‫solicitação de exibição do agente

5
00:00:11,260 --> 00:00:13,010
‫em vez do retorno de chamada.

6
00:00:13,010 --> 00:00:16,410
‫E isso vai funcionar porque a biblioteca de superagentes, na

7
00:00:16,410 --> 00:00:19,770
‫verdade, oferece suporte para promessas prontas para o uso e,

8
00:00:19,770 --> 00:00:21,980
‫portanto, podemos simplesmente usá-las aqui.

9
00:00:21,980 --> 00:00:25,410
‫Para funções de nó, provenientes de pacotes de nós internos como

10
00:00:25,410 --> 00:00:28,395
‫Read File, na verdade teremos que construir a promessa

11
00:00:28,395 --> 00:00:31,690
‫nós mesmos, e faremos isso mais tarde na próxima aula,

12
00:00:31,690 --> 00:00:32,523
‫ou assim.

13
00:00:32,523 --> 00:00:33,356
‫Mas, por

14
00:00:33,356 --> 00:00:36,120
‫enquanto, quero que você aprenda como consumir promessas

15
00:00:36,120 --> 00:00:38,500
‫e só mais tarde como construí-las.

16
00:00:38,500 --> 00:00:40,433
‫Ok, então, novamente, vamos começar

17
00:00:40,433 --> 00:00:42,350
‫com a biblioteca de

18
00:00:42,350 --> 00:00:45,930
‫super agentes e mais especificamente com o método get aqui.

19
00:00:45,930 --> 00:00:50,220
‫Porque este método aqui realmente retorna uma promessa.

20
00:00:50,220 --> 00:00:53,690
‫Portanto, sem entrar em muitos detalhes, por enquanto, uma

21
00:00:53,690 --> 00:00:55,410
‫promessa basicamente implementa o

22
00:00:55,410 --> 00:00:57,550
‫conceito de um valor futuro.

23
00:00:57,550 --> 00:01:00,470
‫Então, basicamente, um valor que esperamos receber em algum momento

24
00:01:00,470 --> 00:01:02,270
‫no futuro, é um pouco como

25
00:01:02,270 --> 00:01:04,900
‫dizermos "Ei, servidor" ou "Ei, API, por favor, pegue

26
00:01:04,900 --> 00:01:08,157
‫uma imagem aleatória de um cachorro" no fundo e deixe saber

27
00:01:08,157 --> 00:01:10,617
‫quando você estiver pronto "e, em seguida, me

28
00:01:10,617 --> 00:01:14,243
‫devolva os dados. " OK?

29
00:01:14,243 --> 00:01:16,906
‫Portanto, essa imagem aleatória é o valor que

30
00:01:16,906 --> 00:01:19,140
‫esperamos em algum momento no futuro.

31
00:01:19,140 --> 00:01:21,340
‫E esse é exatamente o tipo de

32
00:01:21,340 --> 00:01:23,650
‫solicitação que estamos fazendo usando uma biblioteca de

33
00:01:23,650 --> 00:01:24,740
‫superagente neste exemplo.

34
00:01:24,740 --> 00:01:25,573
‫Direito.

35
00:01:25,573 --> 00:01:28,840
‫E o método get que usamos novamente retornará

36
00:01:28,840 --> 00:01:32,660
‫automática e imediatamente uma promessa assim que iniciarmos a

37
00:01:32,660 --> 00:01:33,493
‫solicitação.

38
00:01:33,493 --> 00:01:35,870
‫Portanto, a promessa ainda não tem valor,

39
00:01:35,870 --> 00:01:38,610
‫porque o servidor ainda está recebendo os dados

40
00:01:38,610 --> 00:01:41,470
‫do servidor de forma assíncrona em segundo plano,

41
00:01:41,470 --> 00:01:43,790
‫mas a promessa está imediatamente disponível

42
00:01:43,790 --> 00:01:47,070
‫e basicamente nos prometendo que obterá alguns dados de volta

43
00:01:47,070 --> 00:01:48,070
‫no futuro.

44
00:01:48,070 --> 00:01:50,150
‫Ok, isso faz sentido?

45
00:01:50,150 --> 00:01:52,960
‫E aquele estado da promessa naquele caso, logo

46
00:01:52,960 --> 00:01:55,660
‫no início, é uma promessa pendente.

47
00:01:55,660 --> 00:01:58,331
‫Então ainda está pendente, ainda

48
00:01:58,331 --> 00:02:01,050
‫não voltou com nenhum dado, ok?

49
00:02:01,050 --> 00:02:03,480
‫Então, aqui, neste ponto, já temos uma promessa com

50
00:02:03,480 --> 00:02:04,750
‫a qual podemos trabalhar.

51
00:02:04,750 --> 00:02:07,470
‫Agora, tudo o que precisamos fazer é consumi-los, o

52
00:02:07,470 --> 00:02:10,350
‫que basicamente significa que devemos esperar que ele volte

53
00:02:10,350 --> 00:02:11,470
‫com os dados.

54
00:02:11,470 --> 00:02:14,513
‫E para fazer isso, usamos o método then nele.

55
00:02:15,710 --> 00:02:19,650
‫Então, tudo o que fazemos é usar então e aqui,

56
00:02:19,650 --> 00:02:22,950
‫passamos uma função de retorno de chamada.

57
00:02:22,950 --> 00:02:25,730
‫Essa função de retorno de chamada será

58
00:02:25,730 --> 00:02:29,740
‫então chamada assim que a promessa for cumprida e seu

59
00:02:29,740 --> 00:02:30,980
‫trabalho for devolvido.

60
00:02:30,980 --> 00:02:33,520
‫E esses dados ficam então disponíveis como um argumento para

61
00:02:33,520 --> 00:02:34,630
‫esse retorno de chamada.

62
00:02:34,630 --> 00:02:36,380
‫Agora gosto de chamar isso de resultado.

63
00:02:39,270 --> 00:02:42,140
‫E então, novamente naquela função de retorno de chamada que

64
00:02:42,140 --> 00:02:44,690
‫temos aqui, então temos esses dados disponíveis.

65
00:02:44,690 --> 00:02:47,962
‫Então, vamos pegar tudo isso aqui e colocá-lo nessa

66
00:02:47,962 --> 00:02:50,830
‫função de retorno de chamada e realmente

67
00:02:50,830 --> 00:02:52,423
‫nos livrar disso.

68
00:02:53,530 --> 00:02:55,350
‫Então, não precisamos mais disso,

69
00:02:55,350 --> 00:02:57,110
‫e dê uma chance.

70
00:02:57,110 --> 00:03:00,380
‫Agora você pode estar pensando, bem, ainda

71
00:03:00,380 --> 00:03:04,510
‫estamos usando callbacks aqui, e sim, isso é verdade.

72
00:03:04,510 --> 00:03:07,650
‫Portanto, isso não parece uma grande mudança por agora,

73
00:03:07,650 --> 00:03:10,530
‫mas depois de transformarmos todo o exemplo aqui

74
00:03:10,530 --> 00:03:11,770
‫em promessas, você

75
00:03:11,770 --> 00:03:15,657
‫verá o grande impacto que as promessas terão em nosso código.

76
00:03:15,657 --> 00:03:19,320
‫Basicamente, se tivermos várias promessas, poderemos encadear esses

77
00:03:19,320 --> 00:03:22,700
‫callbacks uns com os outros, em vez

78
00:03:22,700 --> 00:03:24,150
‫de aninhá-los.

79
00:03:24,150 --> 00:03:26,343
‫O que já é uma grande melhoria.

80
00:03:27,370 --> 00:03:29,520
‫Agora, uma coisa que esqueci de mencionar

81
00:03:29,520 --> 00:03:32,850
‫antes é que uma promessa assim que retorna com os dados

82
00:03:32,850 --> 00:03:34,980
‫é chamada de promessa resolvida.

83
00:03:34,980 --> 00:03:37,180
‫Portanto, no início é uma promessa pendente

84
00:03:37,180 --> 00:03:39,160
‫e, quando obtém os dados

85
00:03:39,160 --> 00:03:41,180
‫com sucesso, é uma promessa resolvida.

86
00:03:41,180 --> 00:03:44,600
‫No entanto, uma promessa resolvida nem sempre pode ser

87
00:03:44,600 --> 00:03:47,670
‫bem-sucedida porque pode ter ocorrido um erro.

88
00:03:47,670 --> 00:03:50,895
‫Portanto, dizemos que uma promessa resolvida pode ser

89
00:03:50,895 --> 00:03:52,510
‫cumprida ou rejeitada.

90
00:03:52,510 --> 00:03:55,680
‫A promessa cumprida, na verdade, tem um resultado que

91
00:03:55,680 --> 00:03:56,513
‫queremos usar.

92
00:03:56,513 --> 00:04:00,860
‫Enquanto uma promessa rejeitada é quando houve um erro.

93
00:04:00,860 --> 00:04:03,050
‫Portanto, lembre-se da situação que tivemos

94
00:04:03,050 --> 00:04:05,950
‫antes, em que tínhamos uma raça de cachorro errada.

95
00:04:05,950 --> 00:04:07,750
‫Nesse caso, tivemos um

96
00:04:07,750 --> 00:04:11,840
‫erro e resolvemos esse erro usando este trecho de código aqui.

97
00:04:11,840 --> 00:04:12,673
‫OK.

98
00:04:12,673 --> 00:04:14,980
‫Agora, a coisa com este método

99
00:04:14,980 --> 00:04:18,160
‫then aqui é que ele realmente só lida com promessas

100
00:04:18,160 --> 00:04:20,770
‫cumpridas, mas não faz nada se houver um

101
00:04:20,770 --> 00:04:23,640
‫erro, porque para isso, na verdade, temos outro método.

102
00:04:23,640 --> 00:04:25,790
‫Então, outro mecanismo para lidar com isso.

103
00:04:25,790 --> 00:04:27,840
‫E esse é o método de captura.

104
00:04:27,840 --> 00:04:29,960
‫Logo após o método

105
00:04:29,960 --> 00:04:32,753
‫then, podemos encadear outro método chamado catch.

106
00:04:34,390 --> 00:04:35,223
‫OK.

107
00:04:35,223 --> 00:04:38,350
‫E então este será chamado se houver um erro.

108
00:04:38,350 --> 00:04:42,243
‫Então, aqui, nós realmente temos acesso a esse objeto de erro.

109
00:04:44,480 --> 00:04:46,640
‫Então, vamos prosseguir, pegar esse

110
00:04:46,640 --> 00:04:48,590
‫trecho de código e

111
00:04:48,590 --> 00:04:49,423
‫colocá-lo

112
00:04:49,423 --> 00:04:52,290
‫aqui, e agora podemos nos livrar disso.

113
00:04:52,290 --> 00:04:54,310
‫Porque, na verdade, neste método

114
00:04:54,310 --> 00:04:56,330
‫then, não temos informações se

115
00:04:56,330 --> 00:04:59,000
‫houve um erro ou não, porque ele só

116
00:04:59,000 --> 00:05:01,620
‫é chamado caso a promessa seja bem-sucedida.

117
00:05:01,620 --> 00:05:03,440
‫Então, se for uma promessa cumprida.

118
00:05:03,440 --> 00:05:07,120
‫Ok, então é legal separar esses dois

119
00:05:07,120 --> 00:05:09,870
‫casos automaticamente para nós.

120
00:05:09,870 --> 00:05:12,400
‫Então, ao invés de ter aquele manuseio

121
00:05:12,400 --> 00:05:13,470
‫estranho que

122
00:05:13,470 --> 00:05:17,400
‫tínhamos antes, podemos simplesmente escrever toda a lógica para o caso

123
00:05:17,400 --> 00:05:19,080
‫de sucesso, que é

124
00:05:19,080 --> 00:05:21,900
‫o mais usual, porque normalmente esperamos que tudo

125
00:05:21,900 --> 00:05:24,550
‫funcione bem, mas no caso de haver

126
00:05:24,550 --> 00:05:29,336
‫um erro, podemos inserir alguma outra lógica aqui para este manipulador de erros aqui.

127
00:05:29,336 --> 00:05:32,370
‫Portanto, mantemos isso bem separado.

128
00:05:32,370 --> 00:05:33,853
‫Vamos mudar aqui novamente.

129
00:05:36,030 --> 00:05:38,493
‫Salve este outro para executá-lo novamente.

130
00:05:39,450 --> 00:05:41,710
‫E aqui temos Not Found, e

131
00:05:41,710 --> 00:05:45,720
‫você vê que na verdade ele inseriu este método catch aqui

132
00:05:45,720 --> 00:05:47,860
‫e não fez nenhuma

133
00:05:47,860 --> 00:05:50,270
‫das coisas que estão neste método then.

134
00:05:50,270 --> 00:05:52,980
‫Agora vá em frente e conserte isso aqui,

135
00:05:52,980 --> 00:05:53,813
‫feche, salve

136
00:05:53,813 --> 00:05:54,900
‫este aqui e

137
00:05:54,900 --> 00:05:55,910
‫lá vamos nós.

138
00:05:55,910 --> 00:05:58,620
‫Então é assim que consumimos promessas.

139
00:05:58,620 --> 00:06:01,870
‫Então, começamos com este método aqui que retornou

140
00:06:01,870 --> 00:06:04,280
‫uma promessa e assim por diante,

141
00:06:04,280 --> 00:06:06,160
‫podemos encadear o método

142
00:06:06,160 --> 00:06:08,810
‫then que trata basicamente do caso de

143
00:06:08,810 --> 00:06:12,060
‫sucesso e, no final, também encadeamos o método

144
00:06:12,060 --> 00:06:16,090
‫catch que lida com o malsucedido, portanto, o rejeitado, promessa.

145
00:06:16,090 --> 00:06:19,860
‫Mas, como eu disse antes, ainda parece como

146
00:06:19,860 --> 00:06:20,930
‫antes.

147
00:06:20,930 --> 00:06:21,763
‫Direito?

148
00:06:21,763 --> 00:06:25,000
‫Portanto, ainda temos essa função de retorno de chamada aqui,

149
00:06:26,180 --> 00:06:28,440
‫então toda essa função de retorno de

150
00:06:28,440 --> 00:06:32,520
‫chamada e também aqui dentro de nosso método then, temos essa função de

151
00:06:32,520 --> 00:06:34,600
‫retorno de chamada do writeFile.

152
00:06:34,600 --> 00:06:37,663
‫Então, vamos corrigir isso no próximo vídeo.

