﻿1
00:00:01,120 --> 00:00:03,120
‫Instrutor: Neste vídeo, vamos falar sobre

2
00:00:03,120 --> 00:00:06,770
‫algo que temos no nó. js chamado rejeições não tratadas

3
00:00:06,770 --> 00:00:09,543
‫e, em seguida, aprender como podemos realmente lidar com elas.

4
00:00:10,970 --> 00:00:14,400
‫Portanto, neste ponto, tratamos com êxito os erros

5
00:00:14,400 --> 00:00:16,330
‫em nosso aplicativo

6
00:00:16,330 --> 00:00:19,970
‫expresso, passando os erros assíncronos operacionais para um

7
00:00:19,970 --> 00:00:22,410
‫middleware de tratamento de erros global.

8
00:00:22,410 --> 00:00:26,200
‫Isso, então, envia mensagens de erro relevantes de

9
00:00:26,200 --> 00:00:30,510
‫volta ao cliente, dependendo do tipo de erro que ocorreu, certo?

10
00:00:30,510 --> 00:00:34,730
‫No entanto, também podem ocorrer erros fora do expresso e um

11
00:00:34,730 --> 00:00:38,520
‫bom exemplo disso em nosso aplicativo atual é a conexão

12
00:00:38,520 --> 00:00:40,810
‫de banco de dados mongodb.

13
00:00:40,810 --> 00:00:43,700
‫Então, imagine que o banco de dados está inativo por algum motivo

14
00:00:43,700 --> 00:00:46,000
‫ou por algum motivo, não podemos fazer login.

15
00:00:46,000 --> 00:00:47,920
‫E, nesse caso, existem erros que

16
00:00:47,920 --> 00:00:49,610
‫também temos que tratar.

17
00:00:49,610 --> 00:00:52,800
‫Mas eles não ocorreram dentro de nosso aplicativo expresso

18
00:00:52,800 --> 00:00:55,810
‫e, portanto, é claro, nosso manipulador de erros

19
00:00:55,810 --> 00:00:58,560
‫que implementamos não detectará esses erros, certo?

20
00:00:58,560 --> 00:01:01,790
‫E então, apenas para testar o

21
00:01:01,790 --> 00:01:05,110
‫que acontece, vamos mudar nossa senha mongodb, ok?

22
00:01:05,110 --> 00:01:06,960
‫Porque assim não conseguiremos

23
00:01:06,960 --> 00:01:10,180
‫nos conectar ao banco de dados, certo?

24
00:01:10,180 --> 00:01:13,110
‫E então devemos obter algum tipo de erro, e

25
00:01:13,110 --> 00:01:15,510
‫então vamos aqui para o nosso arquivo

26
00:01:15,510 --> 00:01:18,633
‫do servidor e salvá-lo a fim de recarregar o nosso

27
00:01:20,710 --> 00:01:23,040
‫servidor, vamos aumentá-lo aqui e, de

28
00:01:23,040 --> 00:01:26,120
‫fato, aqui temos uma rejeição de promessa não tratada.

29
00:01:26,120 --> 00:01:29,510
‫E esse é realmente o tópico deste vídeo.

30
00:01:29,510 --> 00:01:33,600
‫Portanto, uma rejeição de promessa não tratada significa que em algum lugar

31
00:01:33,600 --> 00:01:37,140
‫do nosso código existe uma promessa que foi rejeitada.

32
00:01:37,140 --> 00:01:41,270
‫Mas essa rejeição não foi tratada em lugar nenhum, certo?

33
00:01:41,270 --> 00:01:44,920
‫E aqui embaixo, você também vê um aviso de depreciação que

34
00:01:44,920 --> 00:01:48,008
‫diz que, no futuro, as rejeições não tratadas

35
00:01:48,008 --> 00:01:51,710
‫simplesmente sairão do programa de nó que está em execução, o

36
00:01:51,710 --> 00:01:54,940
‫que pode nem sempre ser o que você deseja, certo?

37
00:01:54,940 --> 00:01:57,450
‫Então, vamos corrigir esse problema e

38
00:01:57,450 --> 00:02:00,000
‫nos livrar dessa rejeição de promessa não tratada.

39
00:02:00,000 --> 00:02:01,910
‫Agora, neste exemplo simples aqui,

40
00:02:01,910 --> 00:02:03,270
‫seria muito

41
00:02:03,270 --> 00:02:05,770
‫fácil lidar com essa rejeição, certo?

42
00:02:05,770 --> 00:02:08,060
‫Tudo o que teríamos que fazer seria vir

43
00:02:08,060 --> 00:02:11,550
‫aqui para este trecho de código onde nossa conexão é realmente feita e,

44
00:02:11,550 --> 00:02:14,100
‫em seguida, adicionar um manipulador de captura lá, certo?

45
00:02:14,100 --> 00:02:16,580
‫Então, um pouco assim, e aqui, poderíamos

46
00:02:16,580 --> 00:02:18,640
‫lidar com essa rejeição

47
00:02:18,640 --> 00:02:20,970
‫e não obteríamos mais esse erro.

48
00:02:20,970 --> 00:02:22,820
‫Deixe-me mostrar isso rapidamente para você.

49
00:02:29,905 --> 00:02:31,960
‫Portanto, tente novamente.

50
00:02:31,960 --> 00:02:35,630
‫E agora, você obtém um erro que é, obviamente, o

51
00:02:35,630 --> 00:02:37,950
‫resultado deste log aqui, mas é

52
00:02:37,950 --> 00:02:41,010
‫claro, não recebemos nenhuma rejeição de promessa não

53
00:02:41,010 --> 00:02:45,060
‫tratada, de novo, porque na verdade lidamos com isso aqui, certo?

54
00:02:45,060 --> 00:02:48,580
‫Então, isso funcionaria, é claro, mas eu realmente quero mostrar a

55
00:02:48,580 --> 00:02:51,720
‫você como lidar globalmente com promessas rejeitadas não tratadas, porque

56
00:02:51,720 --> 00:02:54,680
‫em um aplicativo maior, pode se tornar um pouco

57
00:02:54,680 --> 00:02:57,860
‫mais difícil sempre manter o controle de todas as promessas

58
00:02:57,860 --> 00:03:00,590
‫que podem ser rejeitadas em alguns ponto, ok?

59
00:03:00,590 --> 00:03:03,280
‫E então, em algum ponto, você pode ter

60
00:03:03,280 --> 00:03:06,690
‫alguma rejeição de promessa não tratada em algum lugar, então deixe-me mostrar

61
00:03:06,690 --> 00:03:09,860
‫a você como lidar com isso basicamente de forma global.

62
00:03:09,860 --> 00:03:14,070
‫E agora vamos aprender como lidar com rejeições não tratadas e

63
00:03:14,070 --> 00:03:16,160
‫vamos fazer isso aqui mesmo.

64
00:03:16,160 --> 00:03:19,530
‫E então lembre-se de como em uma das primeiras

65
00:03:19,530 --> 00:03:21,900
‫seções do curso, falamos sobre eventos

66
00:03:21,900 --> 00:03:24,080
‫e ouvintes de eventos, certo?

67
00:03:24,080 --> 00:03:28,010
‫E agora, é hora de realmente usar esse conhecimento.

68
00:03:28,010 --> 00:03:30,940
‫Portanto, cada vez que houver uma rejeição

69
00:03:30,940 --> 00:03:34,180
‫não tratada em algum lugar em nosso aplicativo, o

70
00:03:34,180 --> 00:03:37,470
‫objeto de processo emitirá um objeto chamado rejeição não

71
00:03:37,470 --> 00:03:41,223
‫tratada e, portanto, podemos assinar esse evento exatamente como este.

72
00:03:42,250 --> 00:03:46,903
‫Então processe. on, lembre-se, e o nome

73
00:03:48,004 --> 00:03:52,053
‫do evento, rejeição não tratada, e a função

74
00:03:52,930 --> 00:03:55,240
‫de retorno de

75
00:03:55,240 --> 00:03:59,369
‫chamada aqui recebe um erro e, portanto, vamos

76
00:03:59,369 --> 00:04:02,793
‫prosseguir e registrar o erro no console.

77
00:04:03,780 --> 00:04:08,653
‫Então, vamos usar err. nome e err. mensagem.

78
00:04:09,620 --> 00:04:11,640
‫Esses são alguns padrões que temos em

79
00:04:12,500 --> 00:04:16,073
‫todos os erros no nó. js tudo bem?

80
00:04:17,570 --> 00:04:20,930
‫Ok, e depois de salvar, já pegamos aqui embaixo

81
00:04:20,930 --> 00:04:24,410
‫o nome do erro e também a mensagem do erro.

82
00:04:24,410 --> 00:04:27,940
‫Autenticação tão ruim porque, é claro, temos

83
00:04:27,940 --> 00:04:29,490
‫a senha errada.

84
00:04:29,490 --> 00:04:32,360
‫E agora, a rejeição de promessa não tratada

85
00:04:32,360 --> 00:04:33,960
‫agora está realmente resolvida.

86
00:04:33,960 --> 00:04:37,430
‫E, claro, não apenas o dessa conexão com falha, mas

87
00:04:37,430 --> 00:04:40,410
‫qualquer outra rejeição de promessa que possamos não

88
00:04:40,410 --> 00:04:44,260
‫detectar em algum lugar do aplicativo é tratada aqui neste final,

89
00:04:44,260 --> 00:04:46,880
‫vamos chamá-lo de rede de segurança, certo?

90
00:04:46,880 --> 00:04:49,890
‫Portanto, sempre temos que presumir que nós, como

91
00:04:49,890 --> 00:04:51,410
‫programadores, vamos cometer erros.

92
00:04:51,410 --> 00:04:54,740
‫E então é sempre melhor ter um lugar central como este para

93
00:04:54,740 --> 00:04:56,560
‫lidar com todas as rejeições

94
00:04:56,560 --> 00:04:59,132
‫de promessa, como uma última rede de segurança, certo?

95
00:04:59,132 --> 00:05:01,800
‫Agora, se realmente tivermos algum problema com

96
00:05:01,800 --> 00:05:04,890
‫a conexão do banco de dados, como temos neste exemplo,

97
00:05:04,890 --> 00:05:07,840
‫então nosso aplicativo não vai funcionar de jeito nenhum.

98
00:05:07,840 --> 00:05:09,760
‫E então tudo o que

99
00:05:09,760 --> 00:05:12,820
‫podemos realmente fazer aqui é encerrar nosso aplicativo, certo?

100
00:05:12,820 --> 00:05:17,053
‫Então, para desligar o aplicativo, usamos o processo. saída.

101
00:05:18,140 --> 00:05:20,420
‫E já usamos isso antes

102
00:05:20,420 --> 00:05:22,850
‫naquele script onde importamos todos os

103
00:05:22,850 --> 00:05:27,080
‫dados do arquivo JSON para o banco de dados, lembra?

104
00:05:27,080 --> 00:05:29,660
‫Então processe. sair e

105
00:05:29,660 --> 00:05:31,810
‫aqui, podemos passar um código.

106
00:05:31,810 --> 00:05:34,140
‫E o código zero representa um

107
00:05:34,140 --> 00:05:36,800
‫sucesso e um representa uma exceção não detectada.

108
00:05:36,800 --> 00:05:40,230
‫E esse é o que geralmente é usado aqui, certo?

109
00:05:40,230 --> 00:05:43,400
‫Normalmente, você sempre verá assim.

110
00:05:43,400 --> 00:05:46,970
‫E vamos apenas adicionar como um log aqui, console. log desmanchar a

111
00:05:50,293 --> 00:05:51,973
‫rejeição, algo

112
00:05:56,020 --> 00:05:57,560
‫assim.

113
00:05:57,560 --> 00:05:59,860
‫Então você vê, eu realmente gosto disso, desse aqui.

114
00:06:02,910 --> 00:06:04,650
‫Apenas deixando isso ser um nó ...

115
00:06:04,650 --> 00:06:06,730
‫Não é realmente um usuário,

116
00:06:06,730 --> 00:06:09,320
‫mas nosso log que estamos fechando, certo?

117
00:06:09,320 --> 00:06:12,330
‫E agora, você vê que o aplicativo realmente travou.

118
00:06:12,330 --> 00:06:16,515
‫E isso é por causa desse processo. saia aqui, certo?

119
00:06:16,515 --> 00:06:18,860
‫Agora, há apenas um problema com

120
00:06:18,860 --> 00:06:20,480
‫a maneira como

121
00:06:20,480 --> 00:06:23,430
‫implementamos agora, que é a maneira como

122
00:06:23,430 --> 00:06:26,990
‫implementamos aqui, apenas processamos. exit é uma maneira

123
00:06:26,990 --> 00:06:30,420
‫muito abrupta de encerrar o programa, porque isso

124
00:06:30,420 --> 00:06:34,030
‫irá abortar imediatamente todas as solicitações que ainda estão em

125
00:06:34,030 --> 00:06:38,300
‫execução ou pendentes e, portanto, pode não ser uma boa ideia, ok?

126
00:06:38,300 --> 00:06:41,550
‫E então, normalmente, o que fazemos é desligar

127
00:06:41,550 --> 00:06:44,210
‫normalmente onde primeiro fechamos o servidor

128
00:06:44,210 --> 00:06:47,140
‫e só então, fechamos o aplicativo, ok?

129
00:06:47,140 --> 00:06:47,973
‫Então vamos...

130
00:06:47,973 --> 00:06:51,440
‫Antes de fazermos isso, precisamos salvar

131
00:06:51,440 --> 00:06:55,670
‫o servidor aqui basicamente em uma variável, certo?

132
00:06:55,670 --> 00:06:59,650
‫E assim o resultado de chamar app. listen é um servidor

133
00:06:59,650 --> 00:07:04,650
‫e agora, nesse servidor, podemos dizer servidor. close que irá, como o nome

134
00:07:05,810 --> 00:07:08,400
‫diz, fechar o servidor e depois

135
00:07:08,400 --> 00:07:10,490
‫de fazer isso, irá

136
00:07:10,490 --> 00:07:14,810
‫executar essa função de callback que passamos para ele e

137
00:07:14,810 --> 00:07:16,130
‫então é

138
00:07:16,130 --> 00:07:19,310
‫só aqui, onde então desligamos o servidor, ok?

139
00:07:19,310 --> 00:07:22,240
‫E assim fazendo isso, fazendo servidor. fechar, damos ao

140
00:07:22,240 --> 00:07:25,630
‫servidor, basicamente, tempo para terminar todas as solicitações que

141
00:07:25,630 --> 00:07:28,890
‫ainda estão pendentes ou em tratamento no momento,

142
00:07:28,890 --> 00:07:31,180
‫e só depois disso, o servidor

143
00:07:31,180 --> 00:07:32,910
‫é basicamente encerrado, certo?

144
00:07:32,910 --> 00:07:34,620
‫Então, quando damos a

145
00:07:34,620 --> 00:07:37,020
‫ele um cofre, não vai parecer

146
00:07:37,020 --> 00:07:39,880
‫exatamente o mesmo porque, (risos) sim, somos os

147
00:07:39,880 --> 00:07:42,850
‫únicos que realmente acessam este aplicativo, mas no cenário

148
00:07:42,850 --> 00:07:45,960
‫do mundo real, devemos sempre fazer assim, ok ?

149
00:07:45,960 --> 00:07:48,200
‫E, claro, não é realmente

150
00:07:48,200 --> 00:07:50,520
‫ideal que o aplicativo tenha travado, certo?

151
00:07:50,520 --> 00:07:53,120
‫Porque agora, é claro, o aplicativo não está funcionando,

152
00:07:53,120 --> 00:07:55,448
‫não está funcionando de jeito nenhum, certo?

153
00:07:55,448 --> 00:07:59,570
‫E então, normalmente, em um aplicativo de produção em um servidor web, normalmente

154
00:07:59,570 --> 00:08:01,690
‫teremos alguma ferramenta que reinicia o

155
00:08:01,690 --> 00:08:05,100
‫aplicativo logo após ele travar, ou também algumas das plataformas

156
00:08:05,100 --> 00:08:08,120
‫que hospedam o nó. js fará

157
00:08:08,120 --> 00:08:11,164
‫isso automaticamente por conta própria, ok?

158
00:08:11,164 --> 00:08:13,920
‫Porque, é claro, não queremos deixar o aplicativo

159
00:08:13,920 --> 00:08:15,590
‫suspenso assim para sempre.

160
00:08:15,590 --> 00:08:18,420
‫Então isso também não é útil, certo?

161
00:08:18,420 --> 00:08:20,410
‫E então, basicamente, é assim que

162
00:08:20,410 --> 00:08:22,590
‫você lida com promessas rejeitadas não tratadas.

163
00:08:22,590 --> 00:08:25,130
‫Então, novamente, basicamente, estamos ouvindo esse evento

164
00:08:25,130 --> 00:08:27,930
‫de rejeição não tratado, que nos permite

165
00:08:27,930 --> 00:08:30,100
‫lidar com todos os

166
00:08:30,100 --> 00:08:32,280
‫erros que ocorrem no código

167
00:08:32,280 --> 00:08:34,470
‫assíncrono que não foram tratados anteriormente.

168
00:08:34,470 --> 00:08:38,050
‫Mas agora, você pode perguntar, e o código síncrono?

169
00:08:38,050 --> 00:08:40,110
‫Onde vamos lidar com isso?

170
00:08:40,110 --> 00:08:43,020
‫E a resposta está, como você pode imaginar,

171
00:08:43,020 --> 00:08:44,523
‫no próximo vídeo.

