﻿1
00:00:01,210 --> 00:00:02,880
‫Istruttore: Cominciamo ora a

2
00:00:02,880 --> 00:00:05,783
‫imparare come risolvere l'inferno delle richiamate usando le promesse.

3
00:00:07,430 --> 00:00:09,750
‫E inizieremo usando una promessa per

4
00:00:09,750 --> 00:00:11,260
‫la richiesta di

5
00:00:11,260 --> 00:00:13,010
‫apparizione dell'agente invece della richiamata.

6
00:00:13,010 --> 00:00:16,410
‫E funzionerà perché la libreria dei super agenti ha

7
00:00:16,410 --> 00:00:19,770
‫effettivamente il supporto per le promesse pronte all'uso,

8
00:00:19,770 --> 00:00:21,980
‫quindi possiamo semplicemente usarle qui.

9
00:00:21,980 --> 00:00:25,410
‫Per le funzioni del nodo, provenienti da pacchetti di nodi interni

10
00:00:25,410 --> 00:00:28,395
‫come Leggi file, dovremo effettivamente costruire noi stessi la

11
00:00:28,395 --> 00:00:31,690
‫promessa e lo faremo più avanti nella prossima lezione, o giù

12
00:00:31,690 --> 00:00:32,523
‫di lì.

13
00:00:32,523 --> 00:00:33,356
‫Ma per

14
00:00:33,356 --> 00:00:36,120
‫ora, voglio che impari come consumare le promesse

15
00:00:36,120 --> 00:00:38,500
‫e solo in seguito come costruirle.

16
00:00:38,500 --> 00:00:40,433
‫Ok, ricominciamo con la libreria

17
00:00:40,433 --> 00:00:42,350
‫dei super agenti

18
00:00:42,350 --> 00:00:45,930
‫e più specificamente con il metodo get qui.

19
00:00:45,930 --> 00:00:50,220
‫Perché questo metodo qui restituisce effettivamente una promessa.

20
00:00:50,220 --> 00:00:53,690
‫Quindi, senza entrare troppo nei dettagli, per ora, una

21
00:00:53,690 --> 00:00:55,410
‫promessa implementa sostanzialmente

22
00:00:55,410 --> 00:00:57,550
‫il concetto di valore futuro.

23
00:00:57,550 --> 00:01:00,470
‫Quindi, in pratica, un valore che ci aspettiamo di ricevere

24
00:01:00,470 --> 00:01:02,270
‫in futuro, quindi è un po'

25
00:01:02,270 --> 00:01:04,900
‫come se dicessimo "Ehi, server" o "Ehi, API, per

26
00:01:04,900 --> 00:01:08,157
‫favore procurami un'immagine casuale di un cane" in background e lascia

27
00:01:08,157 --> 00:01:10,617
‫che fammi sapere quando sei pronto "e poi

28
00:01:10,617 --> 00:01:13,410
‫restituiscimi quei dati. " Va

29
00:01:13,410 --> 00:01:14,243
‫bene?

30
00:01:14,243 --> 00:01:16,906
‫Quindi quell'immagine casuale è il valore

31
00:01:16,906 --> 00:01:19,140
‫che ci aspettiamo in futuro.

32
00:01:19,140 --> 00:01:21,340
‫E questo è esattamente il tipo di richiesta

33
00:01:21,340 --> 00:01:23,650
‫che stiamo facendo utilizzando una libreria di super agenti

34
00:01:23,650 --> 00:01:24,740
‫in questo esempio.

35
00:01:24,740 --> 00:01:25,573
‫Destra.

36
00:01:25,573 --> 00:01:28,840
‫E il metodo get che usiamo di nuovo

37
00:01:28,840 --> 00:01:32,660
‫restituirà automaticamente e immediatamente una promessa non appena avvieremo la

38
00:01:32,660 --> 00:01:33,493
‫richiesta.

39
00:01:33,493 --> 00:01:35,870
‫Quindi la promessa non ha ancora

40
00:01:35,870 --> 00:01:38,610
‫un valore, perché il server sta ancora ricevendo

41
00:01:38,610 --> 00:01:41,470
‫i dati dal server in modo asincrono in

42
00:01:41,470 --> 00:01:43,790
‫background, ma la promessa è immediatamente

43
00:01:43,790 --> 00:01:47,070
‫disponibile e sostanzialmente ci promette che riceverà alcuni dati

44
00:01:47,070 --> 00:01:48,070
‫in futuro.

45
00:01:48,070 --> 00:01:50,150
‫Ok, ha senso?

46
00:01:50,150 --> 00:01:52,960
‫E quello stato della promessa in quel caso, così

47
00:01:52,960 --> 00:01:55,660
‫proprio all'inizio, è una promessa in sospeso.

48
00:01:55,660 --> 00:01:58,331
‫Quindi è ancora in sospeso, non

49
00:01:58,331 --> 00:02:01,050
‫è ancora tornato con nessun dato, ok?

50
00:02:01,050 --> 00:02:03,480
‫Quindi qui, a questo punto, abbiamo già una promessa

51
00:02:03,480 --> 00:02:04,750
‫con cui possiamo lavorare.

52
00:02:04,750 --> 00:02:07,470
‫Ora tutto ciò che dobbiamo fare è consumarlo,

53
00:02:07,470 --> 00:02:10,350
‫il che significa sostanzialmente che aspettiamo che torni con

54
00:02:10,350 --> 00:02:11,470
‫i dati.

55
00:02:11,470 --> 00:02:14,513
‫E per farlo, usiamo il metodo then su di esso.

56
00:02:15,710 --> 00:02:19,650
‫Quindi, tutto ciò che facciamo è usare then e

57
00:02:19,650 --> 00:02:22,950
‫poi qui, passiamo una funzione di callback.

58
00:02:22,950 --> 00:02:25,730
‫Questa funzione di callback verrà quindi chiamata non appena

59
00:02:25,730 --> 00:02:29,740
‫la promessa avrà finito di fare il suo lavoro e sarà tornata

60
00:02:29,740 --> 00:02:30,980
‫con i dati.

61
00:02:30,980 --> 00:02:33,520
‫E quei dati sono quindi disponibili come argomento

62
00:02:33,520 --> 00:02:34,630
‫per quel callback.

63
00:02:34,630 --> 00:02:36,380
‫Ora mi piace chiamarlo il risultato.

64
00:02:39,270 --> 00:02:42,140
‫E così, di nuovo in quella funzione di callback

65
00:02:42,140 --> 00:02:44,690
‫che abbiamo qui, abbiamo quei dati disponibili.

66
00:02:44,690 --> 00:02:47,962
‫Quindi prendiamo tutto questo qui e mettiamolo in

67
00:02:47,962 --> 00:02:50,830
‫questa funzione di callback e poi

68
00:02:50,830 --> 00:02:52,423
‫liberiamoci di questo.

69
00:02:53,530 --> 00:02:55,350
‫Quindi non ne abbiamo più

70
00:02:55,350 --> 00:02:57,110
‫bisogno e salvatelo.

71
00:02:57,110 --> 00:03:00,380
‫Ora potresti pensare, beh, stiamo ancora usando

72
00:03:00,380 --> 00:03:04,510
‫i callback qui, e sì, in realtà è vero.

73
00:03:04,510 --> 00:03:07,650
‫Quindi questo non sembra un grande cambiamento per

74
00:03:07,650 --> 00:03:10,530
‫ora, ma dopo aver trasformato l'intero esempio

75
00:03:10,530 --> 00:03:11,770
‫qui in promesse,

76
00:03:11,770 --> 00:03:15,657
‫vedrai il grande impatto che le promesse avranno sul nostro codice.

77
00:03:15,657 --> 00:03:19,320
‫Quindi questo è fondamentalmente se abbiamo più promesse, saremo

78
00:03:19,320 --> 00:03:22,700
‫in grado di concatenare queste callback l'una sull'altra

79
00:03:22,700 --> 00:03:24,150
‫invece di annidarle.

80
00:03:24,150 --> 00:03:26,343
‫Che è già un enorme miglioramento.

81
00:03:27,370 --> 00:03:29,520
‫Una cosa che ho dimenticato di menzionare

82
00:03:29,520 --> 00:03:32,850
‫prima è che una promessa non appena ritorna con i

83
00:03:32,850 --> 00:03:34,980
‫dati viene chiamata promessa risolta.

84
00:03:34,980 --> 00:03:37,180
‫Quindi all'inizio è una promessa in sospeso

85
00:03:37,180 --> 00:03:39,160
‫e quando ottiene con successo

86
00:03:39,160 --> 00:03:41,180
‫i dati, è quindi una promessa risolta.

87
00:03:41,180 --> 00:03:44,600
‫Tuttavia, una promessa risolta potrebbe non avere sempre

88
00:03:44,600 --> 00:03:47,670
‫successo perché potrebbe essersi verificato un errore.

89
00:03:47,670 --> 00:03:50,895
‫Quindi diciamo che una promessa risolta può essere

90
00:03:50,895 --> 00:03:52,510
‫soddisfatta o rifiutata.

91
00:03:52,510 --> 00:03:55,680
‫La promessa mantenuta ha in realtà un risultato che

92
00:03:55,680 --> 00:03:56,513
‫vogliamo usare.

93
00:03:56,513 --> 00:04:00,860
‫Mentre una promessa rifiutata è quando si è verificato un errore.

94
00:04:00,860 --> 00:04:03,050
‫Quindi ricorda la situazione che abbiamo

95
00:04:03,050 --> 00:04:05,950
‫avuto prima in cui avevamo una razza di cane sbagliata.

96
00:04:05,950 --> 00:04:07,750
‫Quindi, in quel caso, abbiamo

97
00:04:07,750 --> 00:04:11,840
‫avuto un errore e l'abbiamo gestito utilizzando questo pezzo di codice qui.

98
00:04:11,840 --> 00:04:12,673
‫Va bene.

99
00:04:12,673 --> 00:04:14,980
‫Ora la cosa con questo metodo then

100
00:04:14,980 --> 00:04:18,160
‫qui è che in realtà gestisce solo le promesse mantenute ma

101
00:04:18,160 --> 00:04:20,770
‫non fa nulla se c'è stato un errore,

102
00:04:20,770 --> 00:04:23,640
‫perché per quello, in realtà abbiamo un altro metodo.

103
00:04:23,640 --> 00:04:25,790
‫Quindi un altro meccanismo per gestirlo.

104
00:04:25,790 --> 00:04:27,840
‫E questo è il metodo di cattura.

105
00:04:27,840 --> 00:04:29,960
‫Quindi, subito dopo il metodo

106
00:04:29,960 --> 00:04:32,753
‫then, possiamo concatenare un altro metodo chiamato catch.

107
00:04:34,390 --> 00:04:35,223
‫Va bene.

108
00:04:35,223 --> 00:04:38,350
‫E così questo verrà chiamato se c'è stato un errore.

109
00:04:38,350 --> 00:04:42,243
‫Quindi qui, abbiamo effettivamente accesso a quell'oggetto errore.

110
00:04:44,480 --> 00:04:46,640
‫E quindi ora andiamo avanti, prendiamo

111
00:04:46,640 --> 00:04:48,590
‫questo pezzo di codice e

112
00:04:48,590 --> 00:04:49,423
‫lo

113
00:04:49,423 --> 00:04:52,290
‫mettiamo qui, e ora possiamo sbarazzarci di questo.

114
00:04:52,290 --> 00:04:54,310
‫Perché in realtà in questo metodo

115
00:04:54,310 --> 00:04:56,330
‫then, non abbiamo informazioni se c'è

116
00:04:56,330 --> 00:04:59,000
‫stato un errore o meno perché viene chiamato solo

117
00:04:59,000 --> 00:05:01,620
‫nel caso in cui la promessa abbia avuto successo.

118
00:05:01,620 --> 00:05:03,440
‫Quindi, se è una promessa mantenuta.

119
00:05:03,440 --> 00:05:07,120
‫Ok, quindi è carino separare questi due

120
00:05:07,120 --> 00:05:09,870
‫casi automaticamente per noi.

121
00:05:09,870 --> 00:05:12,400
‫Quindi, invece di avere quella strana gestione

122
00:05:12,400 --> 00:05:13,470
‫che avevamo

123
00:05:13,470 --> 00:05:17,400
‫prima, possiamo semplicemente scrivere tutta la logica per il caso di

124
00:05:17,400 --> 00:05:19,080
‫successo che è il

125
00:05:19,080 --> 00:05:21,900
‫più comune perché di solito ci aspettiamo che

126
00:05:21,900 --> 00:05:24,550
‫tutto funzioni bene, ma nel caso ci fosse

127
00:05:24,550 --> 00:05:29,336
‫un errore, possiamo inserire qualche altra logica quaggiù in questo gestore di errori qui.

128
00:05:29,336 --> 00:05:32,370
‫Quindi lo teniamo ben separato.

129
00:05:32,370 --> 00:05:33,853
‫Cambiamolo di nuovo qui.

130
00:05:36,030 --> 00:05:38,493
‫Dare questo un altro salvataggio per eseguirlo di nuovo.

131
00:05:39,450 --> 00:05:41,710
‫E quindi qui abbiamo Not Found, e

132
00:05:41,710 --> 00:05:45,720
‫quindi vedete che in realtà è entrato in questo metodo catch qui

133
00:05:45,720 --> 00:05:47,860
‫e non ha fatto nessuna

134
00:05:47,860 --> 00:05:50,270
‫delle cose che sono in questo metodo then.

135
00:05:50,270 --> 00:05:52,980
‫Ora vai avanti e risolvi questo qui,

136
00:05:52,980 --> 00:05:53,813
‫chiudilo,

137
00:05:53,813 --> 00:05:54,900
‫salva questo e

138
00:05:54,900 --> 00:05:55,910
‫ci siamo.

139
00:05:55,910 --> 00:05:58,620
‫Quindi è così che consumiamo le promesse.

140
00:05:58,620 --> 00:06:01,870
‫Quindi abbiamo iniziato con questo metodo qui che

141
00:06:01,870 --> 00:06:04,280
‫ha restituito una promessa e così

142
00:06:04,280 --> 00:06:06,160
‫via, possiamo concatenare il

143
00:06:06,160 --> 00:06:08,810
‫metodo then che gestisce fondamentalmente il caso

144
00:06:08,810 --> 00:06:12,060
‫di successo, e poi alla fine, concateniamo anche

145
00:06:12,060 --> 00:06:16,090
‫il metodo catch che gestisce l'esito negativo, quindi il rifiuto, promettere.

146
00:06:16,090 --> 00:06:19,860
‫Ma come ho detto prima, questo sembra ancora

147
00:06:19,860 --> 00:06:20,930
‫come prima.

148
00:06:20,930 --> 00:06:21,763
‫Destra?

149
00:06:21,763 --> 00:06:25,000
‫Quindi abbiamo ancora questa funzione di callback qui,

150
00:06:26,180 --> 00:06:28,440
‫quindi tutta questa funzione di callback

151
00:06:28,440 --> 00:06:32,520
‫e anche qui all'interno del nostro metodo then, abbiamo questa funzione

152
00:06:32,520 --> 00:06:34,600
‫di callback di writeFile.

153
00:06:34,600 --> 00:06:37,663
‫Quindi andiamo avanti e risolviamo il problema nel prossimo video.

