﻿1
00:00:01,500 --> 00:00:03,600
‫Instrutor: Neste vídeo, iremos promissionar as

2
00:00:03,600 --> 00:00:06,680
‫funções de leitura de arquivo e gravação de arquivo.

3
00:00:06,680 --> 00:00:09,440
‫O que significa que faremos com que eles

4
00:00:09,440 --> 00:00:11,230
‫retornem promessas em vez

5
00:00:11,230 --> 00:00:14,383
‫de passarmos funções de retorno de chamada para eles.

6
00:00:16,180 --> 00:00:19,156
‫Então, se você quiser, é basicamente uma função de leitura de

7
00:00:19,156 --> 00:00:20,890
‫arquivo que retorna uma promessa

8
00:00:20,890 --> 00:00:24,300
‫e que recebe apenas o nome do arquivo, sem retorno de chamada.

9
00:00:24,300 --> 00:00:26,023
‫Então, vamos fazer exatamente isso.

10
00:00:28,530 --> 00:00:33,530
‫Então, vamos criar uma função pro ler arquivo.

11
00:00:34,110 --> 00:00:36,380
‫Tão pró para promessa porque, novamente,

12
00:00:36,380 --> 00:00:37,970
‫retorna uma promessa.

13
00:00:37,970 --> 00:00:40,270
‫E então tudo o que fazemos é passar

14
00:00:41,590 --> 00:00:44,713
‫o nome do arquivo e como estávamos dizendo, retornar uma promessa.

15
00:00:46,060 --> 00:00:49,570
‫Portanto, retorne uma nova promessa.

16
00:00:49,570 --> 00:00:52,150
‫Portanto, usamos o construtor de promessa

17
00:00:52,150 --> 00:00:55,540
‫aqui, que foi introduzido na linguagem com ES6.

18
00:00:55,540 --> 00:00:58,600
‫Portanto, antes do ES6, como o ES5,

19
00:00:58,600 --> 00:01:00,030
‫ES4 e todas

20
00:01:00,030 --> 00:01:03,820
‫as versões anteriores, não havia suporte para promessas em JavaScript.

21
00:01:03,820 --> 00:01:05,670
‫Mas eles mudaram isso no

22
00:01:05,670 --> 00:01:08,660
‫ES6 e tornaram a linguagem muito melhor nesse aspecto.

23
00:01:08,660 --> 00:01:12,010
‫Portanto, em relação ao JavaScript assíncrono.

24
00:01:12,010 --> 00:01:14,350
‫Agora, este construtor de promessa

25
00:01:14,350 --> 00:01:17,400
‫aqui leva em uma função chamada executor,

26
00:01:17,400 --> 00:01:20,980
‫que será chamada imediatamente quando a promessa for criada.

27
00:01:20,980 --> 00:01:24,450
‫E esta função terá dois argumentos, então

28
00:01:24,450 --> 00:01:26,363
‫resolva e rejeite.

29
00:01:28,330 --> 00:01:30,370
‫Portanto, resolva e rejeite, mas

30
00:01:30,370 --> 00:01:32,770
‫por enquanto não se preocupe com eles,

31
00:01:32,770 --> 00:01:35,020
‫estaremos falando sobre eles em um minuto.

32
00:01:35,020 --> 00:01:38,550
‫Por enquanto, vamos nos concentrar apenas nessa função do executor

33
00:01:38,550 --> 00:01:41,470
‫em si, porque é aqui que realmente fazemos

34
00:01:41,470 --> 00:01:43,450
‫todo esse trabalho assíncrono.

35
00:01:43,450 --> 00:01:46,430
‫Neste caso, o arquivo lido funciona.

36
00:01:46,430 --> 00:01:48,890
‫Então é aqui que vamos chamar o fs. readfile com

37
00:01:51,040 --> 00:01:53,287
‫o nome do arquivo que foi

38
00:01:53,287 --> 00:01:57,270
‫passado e a função de retorno de chamada usual, certo.

39
00:01:57,270 --> 00:02:00,660
‫Portanto, o erro e os dados são exatamente

40
00:02:00,660 --> 00:02:02,000
‫como antes.

41
00:02:02,000 --> 00:02:03,550
‫Portanto, tenha em mente que

42
00:02:03,550 --> 00:02:06,200
‫não estamos realmente mudando a função de leitura de

43
00:02:06,200 --> 00:02:07,997
‫arquivo, estamos simplesmente criando uma nova

44
00:02:07,997 --> 00:02:11,140
‫função que, nos bastidores, é claro, ainda executa a função

45
00:02:11,140 --> 00:02:13,850
‫de leitura de arquivo embutida, mas retorna uma promessa

46
00:02:13,850 --> 00:02:15,570
‫para que possamos usar a

47
00:02:15,570 --> 00:02:17,040
‫promessa em seu

48
00:02:17,040 --> 00:02:19,170
‫lugar da função de retorno de chamada.

49
00:02:19,170 --> 00:02:20,320
‫OK.

50
00:02:20,320 --> 00:02:22,630
‫Portanto, temos a função de leitura de

51
00:02:22,630 --> 00:02:24,270
‫arquivo aqui que fará

52
00:02:24,270 --> 00:02:27,250
‫seu trabalho e, quando estiver pronta, retornará com os dados.

53
00:02:27,250 --> 00:02:29,070
‫E agora é aqui que

54
00:02:29,070 --> 00:02:31,510
‫as funções de resolução e rejeição entram em jogo.

55
00:02:31,510 --> 00:02:34,610
‫Como esses dois argumentos estão

56
00:02:34,610 --> 00:02:38,390
‫disponíveis na função do executor, eles são funções.

57
00:02:38,390 --> 00:02:40,410
‫Agora, chamar a função

58
00:02:40,410 --> 00:02:44,250
‫de resolução basicamente marcará a promessa como bem-sucedida,

59
00:02:44,250 --> 00:02:45,320
‫portanto,

60
00:02:45,320 --> 00:02:49,010
‫cumprida e retornará o valor bem-sucedido da promessa.

61
00:02:49,010 --> 00:02:50,310
‫Então, vamos realmente fazer isso.

62
00:02:51,520 --> 00:02:55,270
‫Portanto, chamamos de resolução com dados.

63
00:02:55,270 --> 00:02:58,690
‫Portanto, qualquer variável que passarmos para a função de

64
00:02:58,690 --> 00:03:00,860
‫resolução é a que estará

65
00:03:00,860 --> 00:03:04,370
‫disponível posteriormente como o argumento no método then, certo?

66
00:03:04,370 --> 00:03:07,310
‫Então, esses dados aqui serão o

67
00:03:07,310 --> 00:03:10,550
‫valor que essa promessa retorna para nós, ok.

68
00:03:10,550 --> 00:03:12,930
‫Isso provavelmente parece um pouco confuso, certo?

69
00:03:12,930 --> 00:03:17,080
‫Portanto, novamente, tudo o que passamos para essa função aqui, para

70
00:03:17,080 --> 00:03:18,840
‫a função de

71
00:03:18,840 --> 00:03:20,690
‫resolução, é o resultado da

72
00:03:20,690 --> 00:03:23,590
‫promessa que estará disponível no manipulador then.

73
00:03:23,590 --> 00:03:24,700
‫Por outro

74
00:03:24,700 --> 00:03:27,800
‫lado, também podemos marcar a promessa como rejeitada

75
00:03:27,800 --> 00:03:29,960
‫caso tenha ocorrido um erro.

76
00:03:29,960 --> 00:03:31,230
‫E fazemos isso chamando,

77
00:03:31,230 --> 00:03:32,450
‫como você

78
00:03:32,450 --> 00:03:34,710
‫provavelmente pode imaginar, a função de rejeição.

79
00:03:34,710 --> 00:03:36,390
‫Então, se houve um erro e

80
00:03:38,300 --> 00:03:40,530
‫isso é parecido com o que fazíamos antes.

81
00:03:40,530 --> 00:03:42,520
‫Portanto, se houver um

82
00:03:42,520 --> 00:03:45,170
‫erro aqui, chame a função de rejeição.

83
00:03:45,170 --> 00:03:47,770
‫E tudo o que passarmos para

84
00:03:47,770 --> 00:03:50,310
‫este será o erro que

85
00:03:50,310 --> 00:03:52,930
‫estará mais tarde disponível no método catch.

86
00:03:52,930 --> 00:03:54,810
‫Então, neste aqui.

87
00:03:54,810 --> 00:03:56,110
‫OK?

88
00:03:56,110 --> 00:03:58,673
‫Então vamos apenas passar uma

89
00:04:00,200 --> 00:04:05,060
‫string aqui, não consegui encontrar aquele arquivo, algum emoji aqui talvez

90
00:04:05,060 --> 00:04:08,480
‫para fazê-lo aparecer um pouco mais em

91
00:04:08,480 --> 00:04:11,030
‫nosso console. logs, certo?

92
00:04:11,030 --> 00:04:11,993
‫E tudo bem.

93
00:04:11,993 --> 00:04:14,070
‫Na verdade, já é isso.

94
00:04:14,070 --> 00:04:15,940
‫Então, vamos revisar isso aqui novamente.

95
00:04:15,940 --> 00:04:17,850
‫Então criamos um novo

96
00:04:17,850 --> 00:04:21,080
‫arquivo, nele passaremos um nome de arquivo.

97
00:04:21,080 --> 00:04:22,200
‫Portanto, este argumento.

98
00:04:22,200 --> 00:04:25,580
‫E tudo o que fazemos aqui é retornar essa promessa.

99
00:04:25,580 --> 00:04:29,160
‫Essa promessa tem uma função de executor, então

100
00:04:29,160 --> 00:04:30,560
‫esta aqui,

101
00:04:30,560 --> 00:04:34,040
‫que é onde fazemos nosso trabalho assíncrono.

102
00:04:34,040 --> 00:04:36,110
‫Nesse caso, é claro que é o nosso

103
00:04:36,110 --> 00:04:36,943
‫fs. readfile.

104
00:04:38,500 --> 00:04:41,250
‫Então, se obtivermos nossos dados de maneira

105
00:04:41,250 --> 00:04:42,810
‫bem-sucedida, chamaremos a

106
00:04:42,810 --> 00:04:44,950
‫função resolver com o valor resolver.

107
00:04:44,950 --> 00:04:46,290
‫E se houver

108
00:04:46,290 --> 00:04:49,040
‫um erro, chamamos a função de rejeição, certo?

109
00:04:49,040 --> 00:04:52,560
‫E agora vamos realmente usar isso na prática.

110
00:04:52,560 --> 00:04:55,030
‫Leia o arquivo pro, nós passamos

111
00:04:55,030 --> 00:04:57,490
‫nosso nome de arquivo.

112
00:04:57,490 --> 00:04:58,890
‫Então é esse, é claro,

113
00:05:00,020 --> 00:05:01,300
‫e é isso.

114
00:05:01,300 --> 00:05:03,460
‫Portanto, agora será uma promessa.

115
00:05:03,460 --> 00:05:04,980
‫E assim como

116
00:05:04,980 --> 00:05:08,203
‫antes, podemos usar nosso método then nisso.

117
00:05:11,670 --> 00:05:14,930
‫Ok, então este argumento de dados aqui será

118
00:05:14,930 --> 00:05:17,890
‫exatamente o que retornamos da promessa, caso

119
00:05:17,890 --> 00:05:19,510
‫tenha sido bem-sucedido.

120
00:05:19,510 --> 00:05:21,540
‫Então, com essa resolução.

121
00:05:21,540 --> 00:05:23,740
‫Portanto, agora nosso arquivo

122
00:05:23,740 --> 00:05:25,540
‫de cachorro contém

123
00:05:25,540 --> 00:05:29,440
‫labrador e esses dados aqui serão labrador.

124
00:05:29,440 --> 00:05:31,280
‫E isso está disponível posteriormente em

125
00:05:31,280 --> 00:05:32,737
‫nosso manipulador aqui.

126
00:05:32,737 --> 00:05:36,230
‫Mas é claro que não precisa ter o mesmo

127
00:05:36,230 --> 00:05:38,670
‫nome, eu também poderia chamar

128
00:05:38,670 --> 00:05:41,300
‫de resultado ou algo não importa, certo?

129
00:05:41,300 --> 00:05:44,080
‫Ok, agora vamos pegar tudo isso e

130
00:05:44,920 --> 00:05:46,463
‫realmente colocá-lo aqui.

131
00:05:48,270 --> 00:05:49,103
‫OK.

132
00:05:49,103 --> 00:05:52,000
‫Livre-se de tudo isso, salve e

133
00:05:52,000 --> 00:05:53,720
‫será executado.

134
00:05:53,720 --> 00:05:55,520
‫Agora temos esse erro aqui, então

135
00:05:55,520 --> 00:05:57,100
‫os dados não são definidos.

136
00:05:57,100 --> 00:05:59,480
‫Isso é porque eu mudei aqui para um resultado.

137
00:05:59,480 --> 00:06:02,210
‫Então, vamos voltar e mudar para dados porque aqui

138
00:06:02,210 --> 00:06:03,270
‫temos dados e aqui

139
00:06:03,270 --> 00:06:04,300
‫temos dados

140
00:06:04,300 --> 00:06:06,610
‫e, dessa forma, não preciso ir em

141
00:06:06,610 --> 00:06:09,210
‫frente e mudar todos os nomes de variáveis.

142
00:06:09,210 --> 00:06:10,690
‫Salve novamente e aqui

143
00:06:10,690 --> 00:06:12,080
‫vamos nós.

144
00:06:12,080 --> 00:06:13,460
‫Então funcionou, entende?

145
00:06:13,460 --> 00:06:15,150
‫Na verdade, pegamos a raça,

146
00:06:15,150 --> 00:06:16,720
‫que ainda é

147
00:06:16,720 --> 00:06:19,870
‫labrador e desta vez da nossa promessa, ok.

148
00:06:19,870 --> 00:06:21,150
‫Então, isso realmente funcionou.

149
00:06:21,150 --> 00:06:23,290
‫Portanto, nossa função pro ler

150
00:06:23,290 --> 00:06:24,890
‫arquivo agora retorna

151
00:06:24,890 --> 00:06:29,890
‫uma promessa e os dados aqui estão disponíveis em nosso manipulador de então.

152
00:06:29,910 --> 00:06:31,660
‫Ótimo, então ele já está

153
00:06:31,660 --> 00:06:33,110
‫funcionando e podemos torná-lo

154
00:06:33,110 --> 00:06:33,943
‫muito melhor

155
00:06:33,943 --> 00:06:36,487
‫e vamos fazer isso, mas por enquanto eu

156
00:06:36,487 --> 00:06:39,170
‫também quero prometer essa função de escrever arquivo aqui.

157
00:06:39,170 --> 00:06:40,580
‫Então, basicamente, faça o mesmo

158
00:06:40,580 --> 00:06:42,520
‫que fizemos com a função de leitura de arquivo.

159
00:06:42,520 --> 00:06:45,110
‫Agora, se você já conhece um pouco

160
00:06:45,110 --> 00:06:49,000
‫sobre no js, talvez você esteja pensando que na verdade existe um

161
00:06:49,000 --> 00:06:52,090
‫nó de função que irá promisificar funções automaticamente para nós.

162
00:06:52,090 --> 00:06:54,300
‫Mas é claro que eu queria mostrar

163
00:06:54,300 --> 00:06:56,130
‫aqui como as promessas realmente

164
00:06:56,130 --> 00:06:57,320
‫funcionam e como

165
00:06:57,320 --> 00:07:01,270
‫as construímos e é por isso que estou fazendo tudo isso aqui, ok.

166
00:07:01,270 --> 00:07:03,860
‫Então, eu realmente quero que você aprenda sobre as promessas,

167
00:07:03,860 --> 00:07:05,410
‫não apenas como nós as consumimos,

168
00:07:05,410 --> 00:07:06,710
‫mas também como construí-las.

169
00:07:06,710 --> 00:07:08,733
‫E é por isso que estou fazendo assim.

170
00:07:11,170 --> 00:07:14,913
‫Então, escreva o arquivo e como uma promessa.

171
00:07:16,720 --> 00:07:19,460
‫E este, na verdade, não precisa apenas do nome

172
00:07:19,460 --> 00:07:22,993
‫do arquivo, mas também dos dados que devem ser gravados nesse arquivo.

173
00:07:25,350 --> 00:07:27,460
‫Mas então a lógica aqui é bastante semelhante.

174
00:07:27,460 --> 00:07:30,253
‫Então, novamente, retornamos uma nova promessa,

175
00:07:31,760 --> 00:07:34,230
‫nela temos nossa função executora

176
00:07:34,230 --> 00:07:37,823
‫que assume resolver e rejeitar como o argumento.

177
00:07:39,090 --> 00:07:40,470
‫E esses são

178
00:07:40,470 --> 00:07:41,860
‫nomes padrão, então resolva e

179
00:07:41,860 --> 00:07:44,000
‫rejeite, você poderia chamá-los do que realmente

180
00:07:44,000 --> 00:07:46,463
‫quisesse, mas esse é o tipo de padrão, certo.

181
00:07:47,780 --> 00:07:48,613
‫Então fs,

182
00:07:50,211 --> 00:07:51,044
‫escreva o

183
00:07:52,870 --> 00:07:54,390
‫arquivo, passamos o arquivo, os

184
00:07:54,390 --> 00:07:57,523
‫dados e então a função de retorno de chamada.

185
00:07:58,580 --> 00:08:01,260
‫E agora algo muito semelhante a antes,

186
00:08:01,260 --> 00:08:02,800
‫então se houve

187
00:08:02,800 --> 00:08:05,570
‫um erro, chame a função de rejeição

188
00:08:05,570 --> 00:08:07,473
‫e passe alguma mensagem lá.

189
00:08:10,550 --> 00:08:12,340
‫Não foi possível gravar

190
00:08:12,340 --> 00:08:16,060
‫o arquivo, novamente com esse emoji aqui para que ele se

191
00:08:16,060 --> 00:08:18,870
‫destaque um pouco mais e caso tudo funcione

192
00:08:18,870 --> 00:08:20,830
‫bem, então é só resolver.

193
00:08:20,830 --> 00:08:24,960
‫Agora não temos nenhum dado realmente para passar aqui, certo?

194
00:08:24,960 --> 00:08:27,940
‫Então, vamos apenas passar em alguma string

195
00:08:27,940 --> 00:08:30,920
‫aleatória algo como dizer sucesso, ok.

196
00:08:30,920 --> 00:08:32,770
‫Portanto, uma promessa

197
00:08:32,770 --> 00:08:36,000
‫nem sempre precisa retornar um valor significativo.

198
00:08:36,000 --> 00:08:38,060
‫Nesse caso, tudo o que realmente estamos

199
00:08:38,060 --> 00:08:39,030
‫tentando fazer

200
00:08:39,030 --> 00:08:42,340
‫aqui é escrever um arquivo que não retorne um valor significativo.

201
00:08:42,340 --> 00:08:46,290
‫Agora estamos prontos para usar essa função prometida, mas antes

202
00:08:46,290 --> 00:08:47,280
‫de

203
00:08:47,280 --> 00:08:49,640
‫fazermos isso, vamos implementar o encadeamento

204
00:08:49,640 --> 00:08:51,750
‫sobre o qual falei antes.

205
00:08:51,750 --> 00:08:52,780
‫Então, no

206
00:08:52,780 --> 00:08:56,170
‫momento, ainda temos retornos de chamada dentro de retornos de

207
00:08:56,170 --> 00:08:58,290
‫chamada dentro de retornos de chamada, certo?

208
00:08:58,290 --> 00:08:59,550
‫Temos isso então, que

209
00:08:59,550 --> 00:09:00,930
‫tem esse retorno de chamada.

210
00:09:00,930 --> 00:09:03,800
‫E então, há outro manipulador then que

211
00:09:03,800 --> 00:09:06,470
‫tem ainda outro callback nele.

212
00:09:06,470 --> 00:09:09,230
‫Então isso realmente não muda nada, muda?

213
00:09:09,230 --> 00:09:12,697
‫Em vez disso, queremos encadear esses manipuladores aqui.

214
00:09:12,697 --> 00:09:14,090
‫E o segredo para

215
00:09:14,090 --> 00:09:17,670
‫fazer isso é fazer com que cada manipulador retorne uma nova promessa.

216
00:09:17,670 --> 00:09:19,280
‫Então, como vamos fazer isso?

217
00:09:19,280 --> 00:09:24,280
‫Bem, lembre-se de que esta função aqui retorna uma promessa.

218
00:09:24,760 --> 00:09:26,230
‫E então tudo o

219
00:09:26,230 --> 00:09:29,290
‫que temos a fazer é retornar a promessa deste primeiro manipulador.

220
00:09:29,290 --> 00:09:30,490
‫Deixe-me mostrar isso para você.

221
00:09:32,370 --> 00:09:35,260
‫Então, dizemos superagente de retorno. pegue e então

222
00:09:35,260 --> 00:09:38,630
‫a string e isso agora é uma promessa, ok.

223
00:09:38,630 --> 00:09:41,920
‫E então fechamos essa função de retorno

224
00:09:41,920 --> 00:09:46,520
‫de chamada aqui e encadeamos esse método então diretamente nele.

225
00:09:46,520 --> 00:09:49,400
‫Salve, agora temos algum erro aqui e

226
00:09:49,400 --> 00:09:51,830
‫isso está na linha 40.

227
00:09:51,830 --> 00:09:53,780
‫Vamos nos livrar disso aqui e

228
00:09:53,780 --> 00:09:54,913
‫tudo bem.

229
00:09:55,760 --> 00:09:57,730
‫Ele mudou a formatação aqui para

230
00:09:57,730 --> 00:09:59,200
‫nós de novo

231
00:09:59,200 --> 00:10:02,700
‫que era mais bonita e então já a temos funcionando aqui.

232
00:10:02,700 --> 00:10:04,420
‫Então, por que isso funciona de novo?

233
00:10:04,420 --> 00:10:06,800
‫Bem, é claro que essa função que

234
00:10:06,800 --> 00:10:09,130
‫criamos no início retorna uma promessa.

235
00:10:09,130 --> 00:10:11,840
‫Assim, podemos usar o método then.

236
00:10:11,840 --> 00:10:14,440
‫Em seguida, fazemos com que essa função de retorno de

237
00:10:14,440 --> 00:10:16,690
‫chamada que está nela retorne uma promessa.

238
00:10:16,690 --> 00:10:18,530
‫E assim

239
00:10:18,530 --> 00:10:21,150
‫podemos encadear o próximo manipulador.

240
00:10:21,150 --> 00:10:22,860
‫Portanto, esta variável

241
00:10:22,860 --> 00:10:25,760
‫de resultado aqui será o valor resolvido

242
00:10:25,760 --> 00:10:29,170
‫desta promessa que retornou do manipulador anterior, certo?

243
00:10:29,170 --> 00:10:30,750
‫Faz sentido?

244
00:10:30,750 --> 00:10:33,020
‫Agora, para dar um passo adiante,

245
00:10:33,020 --> 00:10:33,990
‫iremos em

246
00:10:33,990 --> 00:10:38,423
‫frente e usaremos nossa função write file pro aqui agora também.

247
00:10:39,350 --> 00:10:41,980
‫E uma vez que queremos continuar encadeando os

248
00:10:41,980 --> 00:10:44,190
‫métodos then, retornaremos isso na verdade.

249
00:10:44,190 --> 00:10:48,163
‫Então volta, escreve o arquivo pro passa o nome

250
00:10:50,420 --> 00:10:53,513
‫do arquivo, que é esse aqui, os

251
00:10:55,840 --> 00:10:57,070
‫dados ...

252
00:11:00,210 --> 00:11:01,360
‫E é isso mesmo.

253
00:11:03,460 --> 00:11:06,600
‫Ok, então não precisamos mais de nada disso aqui, vamos

254
00:11:06,600 --> 00:11:08,250
‫apenas comentar por enquanto.

255
00:11:09,880 --> 00:11:11,650
‫Livre-se deste espaço

256
00:11:11,650 --> 00:11:14,973
‫aqui e ali podemos encadear o próximo manipulador.

257
00:11:16,010 --> 00:11:18,230
‫Então, e lembre-se de

258
00:11:18,230 --> 00:11:21,950
‫que aqui não tínhamos nenhum valor resolvido significativo.

259
00:11:21,950 --> 00:11:24,240
‫Portanto, não queremos nenhum argumento

260
00:11:24,240 --> 00:11:26,580
‫para esta função de retorno de

261
00:11:26,580 --> 00:11:31,433
‫chamada aqui, tudo o que queremos fazer é registrar essa string, certo?

262
00:11:32,640 --> 00:11:34,970
‫Então agora podemos realmente nos livrar disso

263
00:11:36,450 --> 00:11:37,920
‫e tudo bem.

264
00:11:37,920 --> 00:11:39,490
‫Então, aqui embaixo, vemos

265
00:11:39,490 --> 00:11:41,090
‫agora que já está funcionando.

266
00:11:41,090 --> 00:11:43,080
‫E, novamente, o truque para

267
00:11:43,080 --> 00:11:46,050
‫ser capaz de encadear todos esses métodos então

268
00:11:46,050 --> 00:11:49,360
‫é retornar uma promessa antes de chamar cada um deles.

269
00:11:49,360 --> 00:11:52,360
‫Portanto, este aqui obviamente retorna uma promessa aqui,

270
00:11:52,360 --> 00:11:55,320
‫então podemos encadear o método then nele.

271
00:11:55,320 --> 00:11:56,860
‫Então, este pedaço de

272
00:11:56,860 --> 00:11:58,110
‫código aqui retornará

273
00:11:58,110 --> 00:12:00,630
‫uma promessa e, portanto, podemos usá-la nela.

274
00:12:00,630 --> 00:12:02,920
‫Então esse trecho de

275
00:12:02,920 --> 00:12:07,320
‫código retornará uma promessa e então podemos usá-lo novamente, ok?

276
00:12:07,320 --> 00:12:09,010
‫Então esse é o segredo.

277
00:12:09,010 --> 00:12:10,380
‫Tente salvar novamente

278
00:12:10,380 --> 00:12:13,500
‫e aqui embaixo veremos que a raça ainda é labrador.

279
00:12:13,500 --> 00:12:16,640
‫Vemos que este aqui é o link, vamos aqui

280
00:12:16,640 --> 00:12:19,180
‫e confirmamos que este aqui é

281
00:12:19,180 --> 00:12:21,300
‫mesmo o mesmo que este.

282
00:12:21,300 --> 00:12:26,050
‫E então ele gravou com sucesso a string no arquivo de

283
00:12:26,050 --> 00:12:30,717
‫texto usando nossa função de gravação de arquivo prometida, certo.

284
00:12:30,717 --> 00:12:34,240
‫E então, no final, temos esse gerenciador de erros.

285
00:12:34,240 --> 00:12:38,060
‫E a beleza aqui é que, para todas essas cadeias e,

286
00:12:38,060 --> 00:12:39,430
‫em seguida, manipuladores

287
00:12:39,430 --> 00:12:43,020
‫no final, precisamos simplesmente de um único manipulador de captura.

288
00:12:43,020 --> 00:12:44,980
‫Portanto, uma função que lida

289
00:12:44,980 --> 00:12:48,910
‫com os erros provenientes de qualquer uma das três promessas, certo.

290
00:12:48,910 --> 00:12:52,090
‫Na verdade, vamos apenas registrar o erro no

291
00:12:52,090 --> 00:12:53,900
‫console e tentar, por

292
00:12:53,900 --> 00:12:56,160
‫exemplo, alterar este arquivo aqui.

293
00:12:56,160 --> 00:12:57,980
‫Na verdade não é

294
00:12:57,980 --> 00:13:01,940
‫o arquivo, mas vou mudar o nome do arquivo

295
00:13:01,940 --> 00:13:06,150
‫aqui, salve-o e agora vemos que não consegui encontrar esse arquivo.

296
00:13:06,150 --> 00:13:07,970
‫Então de onde vem isso?

297
00:13:07,970 --> 00:13:09,720
‫Isso vem direto

298
00:13:09,720 --> 00:13:13,410
‫da chamada da função de rejeição, certo?

299
00:13:13,410 --> 00:13:16,320
‫Portanto, temos um erro aqui porque não conseguimos encontrar o arquivo

300
00:13:16,320 --> 00:13:18,890
‫e, por isso, chamamos a função de rejeição.

301
00:13:18,890 --> 00:13:22,600
‫E essa função de rejeição marcará esta promessa aqui, então lembre-se de

302
00:13:23,850 --> 00:13:25,720
‫que esta é uma promessa.

303
00:13:25,720 --> 00:13:27,780
‫Irá marcá-lo como rejeitado.

304
00:13:27,780 --> 00:13:30,870
‫E, portanto, a função catch é chamada.

305
00:13:30,870 --> 00:13:33,260
‫E então registramos esse erro no console.

306
00:13:33,260 --> 00:13:36,313
‫E o resultado disso é o que você pode ver aqui.

307
00:13:37,360 --> 00:13:40,830
‫Ok, vamos colocá-lo de volta agora que

308
00:13:40,830 --> 00:13:41,900
‫funciona.

309
00:13:41,900 --> 00:13:43,920
‫Agora vamos entrar no arquivo, criar

310
00:13:43,920 --> 00:13:45,880
‫um cão que não existe

311
00:13:50,010 --> 00:13:54,320
‫e agora, oh, aqui temos esse grande erro estranho e isso é porque

312
00:13:54,320 --> 00:13:57,583
‫estamos simplesmente registrando todo o erro e não a

313
00:13:57,583 --> 00:14:00,700
‫mensagem de erro como estávamos fazendo antes, mas não

314
00:14:00,700 --> 00:14:01,723
‫não importa.

315
00:14:03,500 --> 00:14:05,203
‫Agora salve aqui agora, coloque

316
00:14:06,170 --> 00:14:07,220
‫de volta

317
00:14:07,220 --> 00:14:08,500
‫e tudo bem.

318
00:14:08,500 --> 00:14:10,210
‫Então agora está tudo funcionando

319
00:14:10,210 --> 00:14:12,510
‫e nos livramos daquela forma triangular que

320
00:14:12,510 --> 00:14:14,040
‫tínhamos em nosso

321
00:14:14,040 --> 00:14:18,420
‫código e agora temos uma chamada estrutura plana de promessas em cadeia.

322
00:14:18,420 --> 00:14:20,600
‫Então, novamente, esta é a maneira

323
00:14:20,600 --> 00:14:23,150
‫mais fácil de gerenciar e espero que você possa

324
00:14:23,150 --> 00:14:25,430
‫começar a apreciar isso e também é mais

325
00:14:25,430 --> 00:14:28,120
‫lógico pensar e raciocinar sobre o código como este.

326
00:14:28,120 --> 00:14:29,270
‫Agora, na

327
00:14:29,270 --> 00:14:31,660
‫próxima aula, iremos realmente dar um passo

328
00:14:31,660 --> 00:14:33,570
‫adiante e tornar isso ainda mais

329
00:14:33,570 --> 00:14:35,210
‫legível e fácil de usar.

330
00:14:35,210 --> 00:14:36,783
‫Portanto, fique atento para isso.

