﻿1
00:00:01,830 --> 00:00:03,030
‫Instrutor: Bem-vindo de volta!

2
00:00:03,030 --> 00:00:06,790
‫Neste vídeo, vamos ler e escrever

3
00:00:06,790 --> 00:00:11,063
‫dois arquivos como antes, mas de forma assíncrona.

4
00:00:13,160 --> 00:00:14,960
‫Vamos adicionar alguns comentários aqui antes.

5
00:00:19,630 --> 00:00:21,183
‫Então, essa

6
00:00:26,160 --> 00:00:31,160
‫é a forma bloqueadora, síncrona, e então faremos um

7
00:00:32,870 --> 00:00:36,480
‫exercício de forma não bloqueadora, assíncrona.

8
00:00:36,480 --> 00:00:38,230
‫Então, não vamos fazer

9
00:00:38,230 --> 00:00:40,300
‫a mesma coisa, só vamos

10
00:00:40,300 --> 00:00:43,150
‫inventar algum outro tipo de exercício maluco aqui.

11
00:00:43,150 --> 00:00:46,350
‫Então, para ler um arquivo de forma

12
00:00:46,350 --> 00:00:48,410
‫assíncrona, funciona assim.

13
00:00:48,410 --> 00:00:53,380
‫Novamente, precisamos do módulo FS e, em seguida, ler o arquivo, mas desta vez,

14
00:00:54,890 --> 00:00:57,920
‫não ler a sincronização do arquivo, é claro.

15
00:00:57,920 --> 00:01:01,930
‫E, novamente, passamos o nome do arquivo, ou o caminho para

16
00:01:01,930 --> 00:01:04,060
‫o arquivo na verdade, e novamente,

17
00:01:04,060 --> 00:01:07,360
‫é txt, e o arquivo que desejo agora

18
00:01:07,360 --> 00:01:11,583
‫é chamado de início. txt,

19
00:01:12,460 --> 00:01:14,603
‫então este.

20
00:01:16,040 --> 00:01:17,860
‫Opa, desculpe por isso.

21
00:01:17,860 --> 00:01:21,790
‫Então, esse é o arquivo que eu quero, na tarefa é ler isso,

22
00:01:21,790 --> 00:01:24,660
‫e vou explicar o porquê um pouco mais tarde.

23
00:01:24,660 --> 00:01:26,860
‫Por enquanto, não se preocupe com o conteúdo aqui.

24
00:01:28,220 --> 00:01:29,360
‫Portanto, no

25
00:01:29,360 --> 00:01:34,360
‫arquivo lido, não precisamos especificar a codificação do arquivo, certo.

26
00:01:34,580 --> 00:01:36,090
‫E assim, o

27
00:01:36,090 --> 00:01:39,500
‫próximo parâmetro, o segundo será uma função de callback, e

28
00:01:39,500 --> 00:01:42,270
‫isso é o que aprendemos na última aula.

29
00:01:42,270 --> 00:01:45,380
‫Portanto, o Node JS é todo construído em torno

30
00:01:45,380 --> 00:01:48,750
‫de retornos de chamada para implementar um comportamento assíncrono, e

31
00:01:48,750 --> 00:01:50,200
‫é assim que funciona.

32
00:01:50,200 --> 00:01:53,080
‫Portanto, o Node começará a ler este

33
00:01:53,080 --> 00:01:56,470
‫arquivo aqui em segundo plano e, assim que estiver

34
00:01:56,470 --> 00:02:00,543
‫pronto, iniciará a função de retorno de chamada que especificamos aqui.

35
00:02:03,880 --> 00:02:06,730
‫Ok, e ele chama essa função de retorno de

36
00:02:06,730 --> 00:02:08,450
‫chamada com dois argumentos.

37
00:02:08,450 --> 00:02:11,440
‫O primeiro são os erros

38
00:02:11,440 --> 00:02:15,560
‫e o segundo são os dados reais, certo?

39
00:02:15,560 --> 00:02:19,130
‫Portanto, esse estilo de retorno de primeira chamada de erro

40
00:02:19,130 --> 00:02:22,090
‫é muito típico no Node JS, certo.

41
00:02:22,090 --> 00:02:24,910
‫Assim, muitas e muitas vezes,

42
00:02:24,910 --> 00:02:28,730
‫o primeiro parâmetro em um callback será o erro,

43
00:02:28,730 --> 00:02:33,060
‫caso tenha havido, e o segundo será o próprio dado.

44
00:02:33,060 --> 00:02:34,403
‫O que importa

45
00:02:34,403 --> 00:02:38,610
‫aqui é que o erro geralmente é sempre o primeiro, certo?

46
00:02:38,610 --> 00:02:41,740
‫E então, apenas para testar

47
00:02:41,740 --> 00:02:46,740
‫por agora, vamos simplesmente registrar os dados no console.

48
00:02:47,100 --> 00:02:50,050
‫E então, vamos agora realmente testar isso.

49
00:02:50,050 --> 00:02:51,520
‫Mas, antes de

50
00:02:51,520 --> 00:02:55,793
‫fazermos isso, vamos especificar o código do arquivamento aqui, certo?

51
00:02:57,820 --> 00:03:00,160
‫Portanto, não estou cem por cento

52
00:03:00,160 --> 00:03:01,933
‫certo de que

53
00:03:04,190 --> 00:03:09,190
‫funcione sem isso, então limpe isso agora, execute-o novamente e aqui vamos ver.

54
00:03:10,400 --> 00:03:13,790
‫Então, vamos analisar, novamente, o que aconteceu aqui.

55
00:03:13,790 --> 00:03:17,260
‫Assim que esta função aqui for executada, ela

56
00:03:17,260 --> 00:03:20,980
‫começará a ler este arquivo em segundo plano sem

57
00:03:20,980 --> 00:03:24,083
‫bloquear o resto da execução do código.

58
00:03:24,970 --> 00:03:27,663
‫Então, deixe-me demonstrar isso aqui.

59
00:03:29,290 --> 00:03:30,690
‫Então, um console. o

60
00:03:33,370 --> 00:03:38,370
‫log irá ler o arquivo, e só para ter um pouco

61
00:03:38,530 --> 00:03:43,170
‫menos de confusão aí, deixe-me comentar essa parte aqui, ok.

62
00:03:43,170 --> 00:03:45,970
‫E então, o que você acha que vai acontecer agora?

63
00:03:45,970 --> 00:03:48,533
‫Qual registro veremos primeiro?

64
00:03:51,830 --> 00:03:55,060
‫E, de fato, primeiro vemos ler

65
00:03:55,060 --> 00:03:58,470
‫o arquivo, e, só então, vemos ler isso.

66
00:03:58,470 --> 00:04:00,960
‫Então, novamente, por que isso aconteceu?

67
00:04:00,960 --> 00:04:04,400
‫Portanto, como mencionei, o Node JS começará a ler

68
00:04:04,400 --> 00:04:07,570
‫o arquivo em segundo plano aqui, não bloqueará

69
00:04:07,570 --> 00:04:11,760
‫o código e, então, passará imediatamente para a próxima linha de código.

70
00:04:11,760 --> 00:04:15,240
‫E, a próxima linha de código, bem, é este log aqui,

71
00:04:15,240 --> 00:04:17,030
‫e essa é a primeira

72
00:04:17,030 --> 00:04:19,520
‫coisa que será registrada aqui no terminal.

73
00:04:19,520 --> 00:04:22,760
‫Só então, quando um arquivo for completamente lido,

74
00:04:22,760 --> 00:04:26,580
‫esta função de retorno de chamada aqui será executada, ok?

75
00:04:26,580 --> 00:04:30,810
‫E, novamente, essa função de retorno de chamada tem acesso ao erro e

76
00:04:30,810 --> 00:04:33,070
‫aos dados que foram lidos, e

77
00:04:33,070 --> 00:04:36,260
‫poderíamos realmente chamar isso aqui de qualquer coisa que quiséssemos.

78
00:04:36,260 --> 00:04:39,250
‫Poderíamos chamá-lo de texto também, não importa realmente, tudo o

79
00:04:39,250 --> 00:04:42,240
‫que importa é que é o segundo argumento nesta função

80
00:04:42,240 --> 00:04:43,713
‫de retorno de chamada.

81
00:04:44,670 --> 00:04:47,070
‫Na verdade, vamos voltar

82
00:04:47,070 --> 00:04:49,740
‫aos dados porque gosto mais disso.

83
00:04:49,740 --> 00:04:54,740
‫E assim, só então, este console. o log será executado com os dados,

84
00:04:54,900 --> 00:04:57,510
‫e também com o texto que estava no arquivo.

85
00:04:57,510 --> 00:05:01,480
‫E é por isso que vemos isso aqui como o segundo registro.

86
00:05:01,480 --> 00:05:04,430
‫Certo, agora para ir ainda mais

87
00:05:04,430 --> 00:05:08,860
‫longe, vamos realmente fazer outro arquivo de leitura, mas em vez disso,

88
00:05:08,860 --> 00:05:11,990
‫para que eu possa mostrar que podemos basicamente

89
00:05:11,990 --> 00:05:16,130
‫fazer várias etapas, uma após a outra, com retornos de chamada.

90
00:05:16,130 --> 00:05:20,810
‫Portanto, etapas que dependem do resultado da etapa anterior.

91
00:05:20,810 --> 00:05:25,310
‫Ok, é por isso que li isso no arquivo inicial,

92
00:05:25,310 --> 00:05:26,610
‫porque há

93
00:05:26,610 --> 00:05:29,930
‫um arquivo chamado leia isso, que tem

94
00:05:29,930 --> 00:05:33,103
‫o conteúdo no qual estamos realmente interessados.

95
00:05:34,090 --> 00:05:34,923
‫OK?

96
00:05:37,060 --> 00:05:39,963
‫Então, o que vou fazer aqui é copiar

97
00:05:40,890 --> 00:05:42,793
‫este código e colocá-lo aqui.

98
00:05:44,740 --> 00:05:48,210
‫Vou chamar este um de dados um, depois

99
00:05:48,210 --> 00:05:52,900
‫os dados dois, e o resultado da segunda etapa, então o segundo

100
00:05:52,900 --> 00:05:55,140
‫arquivo lido, dependerá do primeiro.

101
00:05:55,140 --> 00:06:00,140
‫Isso porque vamos usar os dados para o nome do arquivo, lembra?

102
00:06:02,030 --> 00:06:05,340
‫Então, aqui estamos fazendo um (murmúrios) agora porque

103
00:06:06,290 --> 00:06:10,730
‫precisamos colocar essa variável, e ela é chamada de dados

104
00:06:14,490 --> 00:06:15,323
‫um.

105
00:06:16,330 --> 00:06:18,290
‫Ok, faz sentido?

106
00:06:18,290 --> 00:06:22,900
‫Então, os dados um serão lidos aqui, ok, e então, na próxima

107
00:06:22,900 --> 00:06:27,900
‫etapa, lemos txt / readthis. txt, que é

108
00:06:30,090 --> 00:06:31,910
‫então isso.

109
00:06:31,910 --> 00:06:35,110
‫Ok, é por isso que este nome de arquivo aqui

110
00:06:35,110 --> 00:06:37,053
‫é o mesmo que este conteúdo.

111
00:06:39,340 --> 00:06:42,283
‫E então, isso é registrado por meio de dados do console para isso.

112
00:06:43,310 --> 00:06:45,833
‫E, vamos testar rapidamente se isso funciona, e de

113
00:06:48,370 --> 00:06:53,370
‫fato, esse é o conteúdo de ler isso. TXT.

114
00:06:53,860 --> 00:06:57,030
‫E, agora, vou dar um passo adiante, mesmo

115
00:06:57,030 --> 00:07:00,740
‫porque há algum outro texto neste arquivo anexado que

116
00:07:00,740 --> 00:07:04,080
‫desejo adicionar a esta primeira string, então há

117
00:07:04,080 --> 00:07:06,420
‫texto vindo do outro arquivo.

118
00:07:06,420 --> 00:07:08,590
‫E assim, temos mais uma

119
00:07:08,590 --> 00:07:10,840
‫etapa que depende da etapa anterior,

120
00:07:10,840 --> 00:07:14,563
‫então o que farei é adicionar outro arquivo de leitura aqui.

121
00:07:15,560 --> 00:07:17,660
‫Então, assim.

122
00:07:17,660 --> 00:07:19,313
‫Então, este é

123
00:07:21,610 --> 00:07:26,610
‫chamado de append, e vou chamá-lo de dados três, dados três aqui,

124
00:07:27,720 --> 00:07:30,133
‫e isso é, novamente, execute isso.

125
00:07:32,760 --> 00:07:37,570
‫E, tudo bem, agora temos esses dois resultados aqui.

126
00:07:37,570 --> 00:07:40,830
‫Tudo bem, e agora finalmente, como última

127
00:07:40,830 --> 00:07:44,030
‫etapa, quero escrever essas duas strings juntas

128
00:07:44,030 --> 00:07:46,360
‫em um arquivo, ok?

129
00:07:46,360 --> 00:07:48,500
‫Até agora, só lemos

130
00:07:48,500 --> 00:07:51,160
‫arquivos, mas também quero escrever um arquivo,

131
00:07:51,160 --> 00:07:53,730
‫então vamos fazer isso aqui também.

132
00:07:53,730 --> 00:07:54,623
‫Então, fs.

133
00:07:57,480 --> 00:08:01,100
‫writeFile e, claro, não estamos usando o síncrono

134
00:08:01,100 --> 00:08:02,140
‫como fizemos

135
00:08:02,140 --> 00:08:06,320
‫antes, mas novamente usamos, assim como aqui e aqui

136
00:08:06,320 --> 00:08:10,113
‫e aqui, usamos a versão assíncrona, não a síncrona.

137
00:08:11,600 --> 00:08:16,600
‫Então, txt slash, faltando este aqui,

138
00:08:19,240 --> 00:08:20,143
‫final.

139
00:08:22,314 --> 00:08:25,933
‫Então, devemos adicionar a codificação de texto aqui também, e então

140
00:08:29,650 --> 00:08:33,040
‫este também aceita uma função de retorno de chamada, mas

141
00:08:33,040 --> 00:08:36,220
‫neste caso não há dados que lemos e, portanto,

142
00:08:36,220 --> 00:08:38,370
‫não precisamos de dois argumentos.

143
00:08:38,370 --> 00:08:41,933
‫Então, o único argumento que temos é o erro, na verdade.

144
00:08:44,100 --> 00:08:48,980
‫Ok, então aqui temos o erro e os dados que foram lidos,

145
00:08:48,980 --> 00:08:52,270
‫mas aqui em writeFile, não há dados.

146
00:08:52,270 --> 00:08:56,690
‫Tudo o que existe, ou pode haver, é um erro, certo?

147
00:08:56,690 --> 00:08:58,530
‫E, na verdade, está

148
00:08:58,530 --> 00:09:03,063
‫faltando algo aqui, que é o que realmente queremos gravar no arquivo.

149
00:09:03,910 --> 00:09:06,430
‫Ok, e esse é o

150
00:09:06,430 --> 00:09:11,100
‫segundo argumento, e o que é, dados dois e dados três.

151
00:09:11,100 --> 00:09:12,823
‫Portanto, novamente uma string (murmura)

152
00:09:14,340 --> 00:09:16,063
‫aqui, dados dois, em

153
00:09:17,620 --> 00:09:21,323
‫seguida, um novo caractere de linha, que novamente, é a barra

154
00:09:23,010 --> 00:09:25,523
‫invertida n, e, em seguida, dados 3.

155
00:09:27,360 --> 00:09:32,010
‫Tudo bem, e assim, assim como com as funções de leitura de arquivo, este retorno

156
00:09:32,010 --> 00:09:35,800
‫de chamada é o que é executado no final, então o que

157
00:09:35,800 --> 00:09:38,660
‫farei aqui é simplesmente registrar através do console que

158
00:09:38,660 --> 00:09:40,613
‫os arquivos foram gravados ou que

159
00:09:41,490 --> 00:09:43,190
‫o arquivo foi foi escrito.

160
00:09:44,430 --> 00:09:49,360
‫Seu arquivo foi escrito e vamos usar alguns emojis

161
00:09:49,360 --> 00:09:53,220
‫divertidos aqui, apenas para deixar o

162
00:09:53,220 --> 00:09:56,883
‫console um pouco mais brilhante

163
00:09:58,300 --> 00:10:03,080
‫para nós, e acho que devemos fazer assim.

164
00:10:03,080 --> 00:10:06,023
‫Portanto, vamos limpar o console mais uma vez,

165
00:10:07,370 --> 00:10:10,560
‫executá-lo e, de fato, veremos que seu arquivo foi gravado.

166
00:10:10,560 --> 00:10:11,833
‫Então, realmente tem?

167
00:10:13,460 --> 00:10:14,990
‫Final.

168
00:10:14,990 --> 00:10:16,433
‫Oh, sim, aqui está.

169
00:10:18,140 --> 00:10:22,040
‫Então, esse é o ler este texto,

170
00:10:22,040 --> 00:10:27,040
‫e o texto anexar, ambos juntos, ambos no mesmo arquivo.

171
00:10:27,490 --> 00:10:32,490
‫Ok, é assim que executamos várias etapas em pedidos, usando

172
00:10:33,160 --> 00:10:36,270
‫funções de retorno de chamada, certo?

173
00:10:36,270 --> 00:10:40,180
‫Pois imagine que você simplesmente fez a leitura do mesmo arquivo, e

174
00:10:40,180 --> 00:10:42,490
‫depois leu o segundo arquivo, então

175
00:10:42,490 --> 00:10:44,060
‫este, logo em seguida.

176
00:10:44,060 --> 00:10:46,770
‫Bem, como você teria acesso aos

177
00:10:46,770 --> 00:10:49,200
‫dados do primeiro, certo?

178
00:10:49,200 --> 00:10:52,420
‫E é assim que surge esse padrão.

179
00:10:52,420 --> 00:10:53,720
‫Na verdade, tem

180
00:10:53,720 --> 00:10:55,930
‫seu próprio nome, e acho que

181
00:10:55,930 --> 00:10:58,240
‫mencionei isso no último vídeo, é o

182
00:10:58,240 --> 00:11:01,490
‫chamado callback hell, e há algumas soluções para tornar este

183
00:11:01,490 --> 00:11:04,080
‫código mais legível e melhor para entender, mas

184
00:11:04,080 --> 00:11:07,130
‫por enquanto, isso não importa em tudo para você.

185
00:11:07,130 --> 00:11:10,650
‫O que importa é que o Node JS

186
00:11:10,650 --> 00:11:13,480
‫foi construído em torno dessa filosofia de

187
00:11:13,480 --> 00:11:17,530
‫callbacks, então é assim que o Node JS implementa operações

188
00:11:17,530 --> 00:11:20,330
‫assíncronas, chamando callbacks assim que

189
00:11:20,330 --> 00:11:23,260
‫a operação que está fazendo for concluída.

190
00:11:23,260 --> 00:11:26,280
‫E, aliás, essa função de forma de escrita que

191
00:11:26,280 --> 00:11:28,110
‫você vê aqui, de novo,

192
00:11:28,110 --> 00:11:29,870
‫caso não esteja familiarizado

193
00:11:29,870 --> 00:11:33,420
‫com ela, é a nova sintaxe do ES6 também, ok?

194
00:11:33,420 --> 00:11:36,320
‫Então, novamente, espero que você esteja familiarizado

195
00:11:36,320 --> 00:11:38,550
‫com o ES6 neste momento,

196
00:11:38,550 --> 00:11:41,950
‫e que tudo isso faça sentido para você.

197
00:11:41,950 --> 00:11:44,580
‫Se você fosse escrever esta

198
00:11:45,700 --> 00:11:49,461
‫função aqui sem a sintaxe da função

199
00:11:49,461 --> 00:11:54,461
‫de erro, faríamos simplesmente assim, function, err, data one, e

200
00:11:55,950 --> 00:11:57,600
‫então assim.

201
00:11:57,600 --> 00:11:59,470
‫Então, essa é

202
00:11:59,470 --> 00:12:02,210
‫uma função normal, digamos uma função

203
00:12:02,210 --> 00:12:05,470
‫antiquada, e a nova versão funciona assim.

204
00:12:05,470 --> 00:12:09,490
‫A diferença entre eles é principalmente a sintaxe, mas também o

205
00:12:09,490 --> 00:12:12,690
‫fato de que uma função de erro, portanto,

206
00:12:12,690 --> 00:12:14,360
‫esse tipo de

207
00:12:14,360 --> 00:12:17,070
‫função, não obtém sua própria palavra-chave de

208
00:12:17,070 --> 00:12:20,860
‫disco, então usa a palavra-chave de disco da função pai.

209
00:12:20,860 --> 00:12:24,540
‫E isso é chamado de palavra-chave de disco lexical,

210
00:12:24,540 --> 00:12:27,500
‫enquanto uma função normal como essa

211
00:12:27,500 --> 00:12:30,920
‫sempre obtém sua própria palavra-chave de disco, certo?

212
00:12:30,920 --> 00:12:33,610
‫Tenho certeza que você está familiarizado com esse

213
00:12:33,610 --> 00:12:37,640
‫tipo de coisa, mas apenas fazendo uma pequena revisão aqui, caso não esteja.

214
00:12:37,640 --> 00:12:39,673
‫Ok, espero que tenha feito desde então.

215
00:12:40,600 --> 00:12:44,150
‫Na verdade, nunca usamos esse erro, não tratamos

216
00:12:44,150 --> 00:12:46,160
‫nenhum erro, então,

217
00:12:46,160 --> 00:12:50,060
‫por exemplo, imagine que esse arquivo aqui não existisse.

218
00:12:50,060 --> 00:12:52,490
‫Bem, poderíamos ter usado este erro

219
00:12:52,490 --> 00:12:56,300
‫e vamos fazer isso, mas apenas para este aqui, então

220
00:12:56,300 --> 00:13:00,820
‫não quero criar todos esses manipuladores de erros aqui, mas apenas nesta

221
00:13:00,820 --> 00:13:04,100
‫situação, digamos que houve um erro, e assim

222
00:13:04,100 --> 00:13:06,463
‫digamos que se erro, o

223
00:13:07,340 --> 00:13:10,373
‫retorno desta função, então não faça mais

224
00:13:12,290 --> 00:13:13,743
‫nada, e registre

225
00:13:18,050 --> 00:13:22,260
‫no console, erro, e então podemos adicionar algum outro emoji aqui,

226
00:13:22,260 --> 00:13:25,653
‫como esta explosão, então como algo explodiu aqui.

227
00:13:28,010 --> 00:13:32,933
‫Então, vamos agora mudar isso aqui, como começar. txt, execute-o novamente e, portanto, temos

228
00:13:33,900 --> 00:13:34,973
‫esse

229
00:13:36,090 --> 00:13:39,980
‫erro agora, então ele nos dá esse log para

230
00:13:39,980 --> 00:13:42,570
‫o console e, como retornamos, ele

231
00:13:42,570 --> 00:13:46,200
‫não fará nada depois disso, então tudo isso é

232
00:13:46,200 --> 00:13:49,990
‫basicamente ignorado e não será executado , que é

233
00:13:49,990 --> 00:13:51,823
‫exatamente o que queremos.

234
00:13:52,680 --> 00:13:55,863
‫Certo, mas se colocarmos de volta ao normal

235
00:13:57,720 --> 00:13:59,090
‫e depois

236
00:13:59,090 --> 00:14:02,010
‫rodarmos novamente, então tudo funcionará como antes.

237
00:14:02,010 --> 00:14:05,270
‫Portanto, acostume-se com esse padrão de retornos de chamada, porque

238
00:14:05,270 --> 00:14:08,270
‫você o verá em todos os lugares no Node JS

239
00:14:08,270 --> 00:14:10,163
‫e em toda esta seção.

