1
00:00:00,000 --> 00:00:04,722
[MUSIK]

2
00:00:04,722 --> 00:00:10,212
Als wir über Dienste im vorherigen Modul sprachen, hatte ich

3
00:00:10,212 --> 00:00:16,070
über Versprechen gesprochen und dann habe ich versprochen, dass ich in diesem Modul zu Versprechen zurückkehren werde.

4
00:00:17,360 --> 00:00:20,360
Also, hier sind wir, werde ich mein Versprechen an Sie erfüllen.

5
00:00:22,090 --> 00:00:28,310
Eine synchrone Berechnung ist überall im World Wide Web.

6
00:00:28,310 --> 00:00:31,410
Und wie das Web funktioniert.

7
00:00:32,880 --> 00:00:35,810
Wenn Sie aus der sequentiellen Programmierwelt kommen,

8
00:00:37,040 --> 00:00:41,640
dauert das Umwickeln des Kopfes um eine synchrone Berechnung ziemlich viel Aufwand.

9
00:00:42,680 --> 00:00:48,570
Es gab viele Versuche, asynchrone Berechnungen so schmerzlos wie

10
00:00:48,570 --> 00:00:54,680
möglich für Menschen zu machen, die aus dem sequentiellen Berechnungsbuch in sie übergehen.

11
00:00:56,850 --> 00:01:01,470
Ein solcher Versuch besteht darin, asynchrone Berechnungen

12
00:01:01,470 --> 00:01:04,790
einfacher zu machen, sind Versprechen.

13
00:01:06,040 --> 00:01:15,220
Wie wir erkennen, wird

14
00:01:16,530 --> 00:01:21,180
es einige Zeit dauern, bis die Ergebnisse für uns verfügbar sind, wenn wir eine Anfrage an einen Dienst oder einen Backend-Server stellen.

15
00:01:22,550 --> 00:01:30,840
Wenn wir eine solche Anfrage machen, während wir mit unserer Arbeit

16
00:01:30,840 --> 00:01:35,680
fortfahren, besteht eine hohe Wahrscheinlichkeit, dass unsere Berechnung an dem Punkt stecken bleibt und auf

17
00:01:35,680 --> 00:01:37,890
die Ergebnisse wartet.

18
00:01:37,890 --> 00:01:44,070
Dies ist ein No-Nein in Bezug auf eine gute Benutzererfahrung.

19
00:01:46,090 --> 00:01:52,420
Daher ist es wichtig, dass

20
00:01:52,420 --> 00:01:57,660
Sie, wenn Ihre Ergebnisse Zeit in Anspruch nehmen, in der Lage sein sollten, vorwärts zu gehen, ohne auf die Regeln zu warten.

21
00:01:57,660 --> 00:02:01,492
Und hier kommt die asynchrone Berechnung zu Ihrem Vorteil.

22
00:02:01,492 --> 00:02:04,640
Bei der asynchronen Berechnung, wenn Sie eine Anfrage senden,

23
00:02:04,640 --> 00:02:07,800
erwarten Sie, dass die Ergebnisse zu einem späteren Zeitpunkt zurückkommen

24
00:02:07,800 --> 00:02:12,720
werden, und Sie sollten damit umgehen können, dass die Basis-Ergebnisse zu einem Zeitpunkt

25
00:02:14,490 --> 00:02:20,410
viel später zurückkommen, als Sie an dem Punkt waren, an dem Sie die Anforderung gestellt haben.

26
00:02:21,830 --> 00:02:25,710
Versprechen geben uns einen Weg, damit umzugehen.

27
00:02:26,790 --> 00:02:32,540
Schauen wir uns die Versprechungen in dieser Vorlesung ein wenig genauer an.

28
00:02:32,540 --> 00:02:35,910
Und dann werden wir auch die Verwendung von Versprechen

29
00:02:35,910 --> 00:02:39,490
in unserer Angular-Anwendung ein wenig später sehen.

30
00:02:39,490 --> 00:02:44,750
Verspricht, das allgemeine Konzept ist ein sehr weites Gebiet für sich.

31
00:02:44,750 --> 00:02:49,030
Und in diesem Kurs habe ich keine Zeit, die Details der Versprechen durchzugehen.

32
00:02:49,030 --> 00:02:51,780
Das wird ein ganzer Kurs an sich.

33
00:02:51,780 --> 00:02:56,950
Ich werde Ihnen nur das Wesentliche von Versprechen geben, die notwendig sind,

34
00:02:56,950 --> 00:03:02,490
damit wir verstehen können, wie wir die Versprechungen innerhalb unserer Winkelanwendung nutzen können.

35
00:03:02,490 --> 00:03:07,230
Ich biete Ihnen eine Menge von Leads zu zusätzlichen

36
00:03:07,230 --> 00:03:11,380
Ressourcen, wo Sie gehen und Versprechungen genauer untersuchen können.

37
00:03:13,110 --> 00:03:17,230
Also, auf diese Frage zu kommen, was genau ist ein Versprechen?

38
00:03:17,230 --> 00:03:21,690
Ein Versprechen ist ein Mechanismus, der asynchrone Berechnungen unterstützt.

39
00:03:21,690 --> 00:03:26,580
Ich habe gerade eine lange Erklärung gegeben, warum asynchrone Berechnung

40
00:03:26,580 --> 00:03:31,340
für das Funktionieren des Web unerlässlich ist. Wenn Sie

41
00:03:31,340 --> 00:03:36,720
nun ein Versprechen verwenden, stellt das Versprechen einen Mechanismus oder

42
00:03:36,720 --> 00:03:42,760
einen Proxy für einen Wert bereit, der in dem Moment, in dem Sie danach fragen, nicht verfügbar ist.

43
00:03:42,760 --> 00:03:46,050
So wird ein Versprechen Ihnen ein Versprechen zurückgeben und sagen, dass,

44
00:03:46,050 --> 00:03:51,430
wenn das Ergebnis verfügbar wird, es zurückkommen wird und Ihnen die Ergebnisse liefern wird.

45
00:03:51,430 --> 00:03:56,850
So gibt ein Versprechen ein Proxy-Objekt an Sie zurück, und Sie halten das Proxy-Objekt fest.

46
00:03:56,850 --> 00:04:02,030
Und dieses Proxy-Objekt gibt Ihnen Zugriff auf die Ergebnisse, wenn sie verfügbar sind.

47
00:04:02,030 --> 00:04:07,290
Und es gibt eine Methode, wie Sie auf die Ergebnisse warten.

48
00:04:07,290 --> 00:04:11,560
Sie unterbrechen Ihre Berechnung an diesem Punkt nicht, stattdessen

49
00:04:13,110 --> 00:04:19,948
konfigurieren Sie eine Möglichkeit, die Ergebnisse zu akzeptieren, wenn sie von diesem Versprechen zurückkommt.

50
00:04:19,948 --> 00:04:23,780
Um es auf den Punkt zu bringen,

51
00:04:23,780 --> 00:04:27,960
stellt Versprechen einen Wert dar, der zu einem späteren Zeitpunkt verfügbar sein wird.

52
00:04:27,960 --> 00:04:29,680
Es kann auch sofort verfügbar sein,

53
00:04:29,680 --> 00:04:32,960
in diesem Fall wird das Versprechen den Wert sofort zurückgeben.

54
00:04:32,960 --> 00:04:37,940
Aber falls es einen Wert zu einem zukünftigen Datum zurückgeben muss, gibt es Ihnen

55
00:04:37,940 --> 00:04:42,040
das Versprechen, dass dieser Wert, wenn er verfügbar wird, an Sie zurückgegeben wird.

56
00:04:43,400 --> 00:04:47,820
Es besteht immer die Möglichkeit, dass das Versprechen nicht erfüllt werden kann,

57
00:04:47,820 --> 00:04:50,730
weil die Ergebnisse aus irgendeinem Grund nicht verfügbar sind.

58
00:04:51,950 --> 00:04:57,150
In diesem Fall wird Ihnen ein Fehler zugestellt oder Ihnen wird eine Ablehnung zugestellt

59
00:04:57,150 --> 00:05:02,430
, und es liegt an Ihnen, sich mit der Tatsache zu befassen, dass das Versprechen abgelehnt wurde.

60
00:05:03,930 --> 00:05:06,890
Auf der nächsten Folie schauen wir uns an, wie wir damit umgehen.

61
00:05:07,950 --> 00:05:11,180
Wie wir bereits gelernt haben, ist ein Versprechen ein Stellvertreter für

62
00:05:11,180 --> 00:05:15,080
etwas, das in der Zukunft passieren würde oder in Zukunft nie passieren könnte.

63
00:05:15,080 --> 00:05:19,745
Also wird ein Versprechen, wenn es Ihnen gegeben wird, im ausstehenden Zustand sein.

64
00:05:20,860 --> 00:05:25,130
Wenn sich das Versprechen auflöst, das heißt, dass die Ergebnisse verfügbar werden und

65
00:05:25,130 --> 00:05:30,080
das Versprechen in der Lage ist, Ihnen die Ergebnisse zu liefern, dann wird das Versprechen auflösen oder

66
00:05:30,080 --> 00:05:31,490
erfüllen.

67
00:05:31,490 --> 00:05:37,130
Und in diesem Fall wird das Versprechen vom Status „Ausstehend“ zum „Auflösen“ oder „

68
00:05:37,130 --> 00:05:38,490
Erfüllungszustand“ verschoben.

69
00:05:38,490 --> 00:05:41,220
Zu diesem Zeitpunkt stehen Ihnen Ihre Ergebnisse zur Verfügung.

70
00:05:42,540 --> 00:05:48,760
Es besteht eine geringe Chance, dass das Versprechen aufgrund eines Fehlers

71
00:05:48,760 --> 00:05:50,590
oder was auch immer der Grund ist, abgelehnt werden kann.

72
00:05:50,590 --> 00:05:53,280
In diesem entfernten Fall

73
00:05:53,280 --> 00:05:57,980
wird Ihnen eine Ablehnung zugestellt, und in diesem Fall wird die Zusage als

74
00:05:57,980 --> 00:06:02,209
im abgelehnten Zustand angesehen, wenn die Ablehnung zugestellt wird.

75
00:06:03,380 --> 00:06:06,710
Wenn Sie also ein Versprechen generieren, wie gesagt,

76
00:06:06,710 --> 00:06:10,560
ist ein Versprechen ein Proxy-Objekt, das Ihnen zugestellt wird.

77
00:06:10,560 --> 00:06:14,580
Also, wenn Sie jemandem ein Versprechen geben, wird das Versprechen intern

78
00:06:14,580 --> 00:06:17,500
eine Funktion haben, die sich sowohl mit der Entschlossenheit als auch mit

79
00:06:17,500 --> 00:06:20,310
den Ablehnungsoptionen darin befasst.

80
00:06:21,480 --> 00:06:22,540
Wenn Sie Code schreiben,

81
00:06:22,540 --> 00:06:28,190
werden Sie sehen, dass Sie Code als neues Versprechen schreiben (Funktion (auflösen, ablehnen).

82
00:06:28,190 --> 00:06:33,350
Egal ob es sich auflöst oder abgelehnt wird, wir müssen in der Lage sein,

83
00:06:33,350 --> 00:06:38,290
die Informationen an wen zurückzusenden, an wen wir das Versprechen abgegeben haben.

84
00:06:39,570 --> 00:06:41,600
Wie machen wir das im Code?

85
00:06:41,600 --> 00:06:44,040
Schauen wir uns das auf der nächsten Folie an.

86
00:06:45,280 --> 00:06:50,430
Hier ist ein Beispiel dafür, wie Versprechen im Code konfiguriert wird.

87
00:06:50,430 --> 00:06:53,870
In der Tat ist dieses Beispiel von der Übung abgeleitet, die Sie

88
00:06:53,870 --> 00:06:55,850
ein wenig später machen werden.

89
00:06:55,850 --> 00:07:01,100
Also hier, wenn wir unseren Service konfigurieren, können wir unseren Service

90
00:07:01,100 --> 00:07:06,830
ein Versprechen an eine Komponente zurückgeben, die Daten vom Service anfordert.

91
00:07:06,830 --> 00:07:08,368
Wenn das Versprechen zurückgegeben

92
00:07:08,368 --> 00:07:13,810
wird, steht Ihnen das Rückgabeversprechen als Objekt zur Verfügung.

93
00:07:13,810 --> 00:07:18,190
Und dieses Versprechen bietet zwei Methoden, die dann und die catch-Methode.

94
00:07:19,420 --> 00:07:23,416
Nun, dann ist das Versprechen erfolgreich gelöst.

95
00:07:23,416 --> 00:07:28,300
Dann wird das Versprechen dazu führen,

96
00:07:28,300 --> 00:07:32,810
eine Entschlossenheit aufzurufen.

97
00:07:32,810 --> 00:07:36,960
Wie Sie gesehen haben, ist das Versprechen konstruiert, und innerhalb des Versprechens

98
00:07:36,960 --> 00:07:42,170
haben Sie die Funktion, die Auflösung und Ablehnung als die beiden Parameter.

99
00:07:42,170 --> 00:07:46,820
Wenn das Versprechen das Ergebnis erfolgreich liefern kann,

100
00:07:46,820 --> 00:07:51,680
ruft es die Auflösungsmethode auf und gibt dann das Ergebnis an Sie zurück.

101
00:07:51,680 --> 00:07:53,520
Wo wird das Ergebnis Wirklichkeit?

102
00:07:54,820 --> 00:07:58,820
Wenn Sie Code schreiben, der auf

103
00:07:58,820 --> 00:08:04,400
das Versprechen wartet, würden Sie angeben, was zu tun ist, wenn das Versprechen das Ergebnis

104
00:08:04,400 --> 00:08:09,370
in der dann -Option für dieses Versprechen zurückgibt.

105
00:08:09,370 --> 00:08:14,590
So sagen Sie zum Beispiel, würden Sie sagen, getdishes.Dann und innerhalb von dann

106
00:08:14,590 --> 00:08:18,810
würden Sie die Funktion, die mit dem Ergebnis umgehen, wenn es kommt, liefern.

107
00:08:20,370 --> 00:08:25,700
Wenn das Versprechen nicht in der Lage ist, korrekt zu beheben, wird es abgelehnt, und

108
00:08:25,700 --> 00:08:28,570
der Fehler wird an Sie zurückgesendet.

109
00:08:28,570 --> 00:08:31,600
Der Fehler ist ein Fehlerobjekt, das an Sie zurückgesendet wird.

110
00:08:31,600 --> 00:08:36,560
Wenn ihr Versprechen abgelehnt wird, befassen Sie sich mit

111
00:08:36,560 --> 00:08:41,020
der Ablehnung mit einem Haken in Ihrem Code.

112
00:08:41,020 --> 00:08:47,460
Innerhalb des Catches werden Sie also eine Funktion bereitstellen, die mit dem Fehler fertig wird.

113
00:08:47,460 --> 00:08:51,470
Zum Beispiel können Sie einfach die Fehlermeldung,

114
00:08:51,470 --> 00:08:56,770
das Konsolenprotokoll ausgeben und den Fehler auf diese Weise behandeln.

115
00:08:56,770 --> 00:09:01,080
Oder Sie haben vielleicht eine aufwendigere Möglichkeit, den Fehler zu behandeln.

116
00:09:01,080 --> 00:09:06,670
Das würde in der catch-Option zur Verfügung gestellt werden, die Sie für diesen Versprechencode

117
00:09:06,670 --> 00:09:12,130
auf Ihrer Seite geben, wenn das Versprechen Ihnen eine Ablehnung liefert.

118
00:09:12,130 --> 00:09:17,690
So umgehen die beiden Seiten der Münze mit Versprechungen.

119
00:09:17,690 --> 00:09:21,160
Von einer Seite wird ein Versprechensobjekt gesendet, und

120
00:09:21,160 --> 00:09:24,730
wenn Sie das Versprechensobjekt mit dem Promise-Objekt erhalten, würden Sie entweder

121
00:09:24,730 --> 00:09:28,300
das Dann und den Catch ausführen, sodass Sie sowohl die Than- als auch die

122
00:09:28,300 --> 00:09:33,510
Catch-Metriken implementieren sollten, die in dieses Versprechensobjekt geändert wurden.

123
00:09:34,780 --> 00:09:39,910
Und dann, von diesem Versprechen beiseite, wenn das Versprechen richtig ist,

124
00:09:39,910 --> 00:09:44,757
dann wird die Entschlossenheit aufgerufen und dadurch wird das Ergebnis

125
00:09:44,757 --> 00:09:48,770
in der damaligen Methode Ihres Versprechens geliefert.

126
00:09:48,770 --> 00:09:51,175
Wenn das Versprechen abgelehnt wird,

127
00:09:51,175 --> 00:09:55,530
liefert der Ablehnungsaufruf den Fehler in Ihren Catch.

128
00:09:56,760 --> 00:10:01,725
So würden Sie Code mit Versprechungen implementieren.

129
00:10:01,725 --> 00:10:07,375
Wir werden uns mit dem Beispiel in der Übung befassen, die diesem Vortrag folgt.

130
00:10:07,375 --> 00:10:09,786
Nun offensichtlich ist die Frage, die ich frage, warum Versprechungen?

131
00:10:11,347 --> 00:10:13,927
Später, wenn wir uns mit Node JS beschäftigen,

132
00:10:13,927 --> 00:10:18,237
werden wir uns damit beschäftigen, wie wir Callbacks konstruieren können.

133
00:10:18,237 --> 00:10:21,677
Und ich werde die Details von Callbacks und die Art und Weise erklären, mit

134
00:10:21,677 --> 00:10:29,920
Callbacks umzugehen, wenn wir das Node JS im letzten Kurs dieser Spezialisierung abdecken.

135
00:10:29,920 --> 00:10:37,400
Callbacks haben ein Problem beim Erstellen, was als Callback Hölle bezeichnet wird.

136
00:10:37,400 --> 00:10:40,000
Sie haben also stark verschachtelten Callback-Code

137
00:10:40,000 --> 00:10:44,650
, der sehr kompliziert ist, um herauszufinden, was er zu tun versucht.

138
00:10:44,650 --> 00:10:50,970
Versprechen bieten eine Möglichkeit, dieses Callback-Hölle Problem zu beheben.

139
00:10:50,970 --> 00:10:55,270
Aber für den Moment, in dem wir uns auf Angular konzentrieren, werde ich diesen Punkt nur erwähnen.

140
00:10:55,270 --> 00:10:59,050
Und dann kommen wir zurück, um uns mit dieser Frage im letzten Kurs zu befassen.

141
00:11:00,760 --> 00:11:05,600
Der andere Vorteil der Verwendung von Versprechen ist, dass Versprechen geändert werden können.

142
00:11:05,600 --> 00:11:08,780
Ein Versprechen, wenn es das Ergebnis in der Bin liefert,

143
00:11:08,780 --> 00:11:11,130
können Sie ein anderes Versprechen und eine Rückkehr generieren, und

144
00:11:11,130 --> 00:11:16,280
dieses Versprechen kann behandelt werden, indem Sie eine andere dann Methode an diese und so weiter verketten.

145
00:11:16,280 --> 00:11:21,720
So können Sie eine Reihe von dann Methoden miteinander verketten, um mit

146
00:11:21,720 --> 00:11:23,470
Versprechungen hintereinander umzugehen.

147
00:11:25,610 --> 00:11:31,850
Wenn das Ergebnis sofort verfügbar ist oder wenn Sie sofort ablehnen,

148
00:11:31,850 --> 00:11:37,190
dann bietet Versprechen eine Methode der sofortigen Rückkehr, ohne darauf

149
00:11:37,190 --> 00:11:39,900
zu warten, dass das Versprechen entweder aufgelöst oder abgelehnt wird.

150
00:11:39,900 --> 00:11:45,766
In diesem Fall werden Sie einfach sagen Versprechen mit einem Kapital p.Resolve und

151
00:11:45,766 --> 00:11:52,243
promise.Reject und dann entweder das Ergebnis oder den Fehler sofort zurückgeben.

152
00:11:52,243 --> 00:11:57,079
In der ersten Übung beschäftigen wir uns mit dieser Methode, den Wert

153
00:11:57,079 --> 00:11:59,480
aus unserem Service an unsere Komponenten zurückzugeben.

154
00:12:00,920 --> 00:12:04,010
Im zweiten Teil der Übung werden wir uns mit

155
00:12:04,010 --> 00:12:09,820
der Situation befassen, in der das Versprechen nach einer Zeitdauer lösen wird.

156
00:12:09,820 --> 00:12:13,400
Und auch innerhalb unserer Komponente sollten wir in der Lage sein, mit der Tatsache umzugehen, dass

157
00:12:13,400 --> 00:12:20,280
die Ergebnisse ein wenig später zurückkommen, als wenn Sie nach dem Ergebnis fragen.

158
00:12:22,485 --> 00:12:25,679
Mit diesem schnellen Verständnis der Versprechen

159
00:12:25,679 --> 00:12:30,393
gehen wir zur nächsten Übung, wo wir mit Versprechungen umgehen werden.

160
00:12:30,393 --> 00:12:33,769
( MUSIK)