﻿1
00:00:01,210 --> 00:00:02,880
‫Kursleiter: Fangen wir jetzt an

2
00:00:02,880 --> 00:00:05,783
‫zu lernen, wie man die Callback-Hölle mit Versprechungen löst.

3
00:00:07,430 --> 00:00:09,750
‫Und wir beginnen damit, dass wir anstelle des

4
00:00:09,750 --> 00:00:11,260
‫Rückrufs ein Versprechen für die

5
00:00:11,260 --> 00:00:13,010
‫Aufforderung zum Erscheinen des Agenten verwenden.

6
00:00:13,010 --> 00:00:16,410
‫Und das wird funktionieren, weil die Superagent-Bibliothek tatsächlich

7
00:00:16,410 --> 00:00:19,770
‫sofort einsatzbereite Versprechen unterstützt, und wir sie

8
00:00:19,770 --> 00:00:21,980
‫hier einfach verwenden können.

9
00:00:21,980 --> 00:00:25,410
‫Für Node-Funktionen, die aus internen Node-Paketen wie Read File stammen,

10
00:00:25,410 --> 00:00:28,395
‫müssen wir das Promise tatsächlich selbst erstellen, und

11
00:00:28,395 --> 00:00:31,690
‫das werden wir später in der nächsten Vorlesung oder

12
00:00:31,690 --> 00:00:32,523
‫so tun.

13
00:00:32,523 --> 00:00:33,356
‫Aber vorerst

14
00:00:33,356 --> 00:00:36,120
‫möchte ich, dass Sie lernen, wie man Versprechen konsumiert

15
00:00:36,120 --> 00:00:38,500
‫und erst später, wie man sie baut.

16
00:00:38,500 --> 00:00:40,433
‫Okay, also beginnen wir

17
00:00:40,433 --> 00:00:42,350
‫wieder mit der

18
00:00:42,350 --> 00:00:45,930
‫Super-Agent-Bibliothek und genauer mit der Methode get hier.

19
00:00:45,930 --> 00:00:50,220
‫Denn diese Methode hier gibt tatsächlich ein Versprechen zurück.

20
00:00:50,220 --> 00:00:53,690
‫Ohne zu sehr ins Detail zu gehen, setzt ein

21
00:00:53,690 --> 00:00:55,410
‫Versprechen im Wesentlichen das

22
00:00:55,410 --> 00:00:57,550
‫Konzept eines zukünftigen Wertes um.

23
00:00:57,550 --> 00:01:00,470
‫Im Grunde also ein Wert, von dem wir erwarten, dass er

24
00:01:00,470 --> 00:01:02,270
‫irgendwann in der Zukunft erhalten wird, also

25
00:01:02,270 --> 00:01:04,900
‫ist es ein bisschen so, als ob wir "Hey, Server"

26
00:01:04,900 --> 00:01:08,157
‫oder "Hey, API, bitte besorge mir ein zufälliges Hundebild" im Hintergrund sagen und

27
00:01:08,157 --> 00:01:10,617
‫lass Ich weiß, wann du bereit bist" und gib mir

28
00:01:10,617 --> 00:01:14,243
‫dann diese Daten zurück. " Okay?

29
00:01:14,243 --> 00:01:16,906
‫Dieses zufällige Bild ist also der Wert, den

30
00:01:16,906 --> 00:01:19,140
‫wir irgendwann in der Zukunft erwarten.

31
00:01:19,140 --> 00:01:21,340
‫Und das ist genau die Art von

32
00:01:21,340 --> 00:01:23,650
‫Anfrage, die wir in diesem Beispiel mit einer

33
00:01:23,650 --> 00:01:24,740
‫Super-Agent-Bibliothek durchführen.

34
00:01:24,740 --> 00:01:25,573
‫Richtig.

35
00:01:25,573 --> 00:01:28,840
‫Und die get-Methode, die wir wieder verwenden, gibt

36
00:01:28,840 --> 00:01:32,660
‫automatisch und sofort ein Promise zurück, sobald wir die Anfrage

37
00:01:32,660 --> 00:01:33,493
‫starten.

38
00:01:33,493 --> 00:01:35,870
‫Das Versprechen hat also noch keinen

39
00:01:35,870 --> 00:01:38,610
‫Wert, da der Server eigentlich noch asynchron

40
00:01:38,610 --> 00:01:41,470
‫im Hintergrund die Daten vom Server holt, aber

41
00:01:41,470 --> 00:01:43,790
‫das Versprechen ist sofort verfügbar

42
00:01:43,790 --> 00:01:47,070
‫und verspricht uns grundsätzlich, dass er in Zukunft einige

43
00:01:47,070 --> 00:01:48,070
‫Daten zurückbekommt.

44
00:01:48,070 --> 00:01:50,150
‫Okay, macht das Sinn?

45
00:01:50,150 --> 00:01:52,960
‫Und dieser Zustand des Versprechens ist in diesem Fall,

46
00:01:52,960 --> 00:01:55,660
‫also gleich am Anfang, ein schwebendes Versprechen.

47
00:01:55,660 --> 00:01:58,331
‫Es steht also noch aus, es

48
00:01:58,331 --> 00:02:01,050
‫sind immer noch keine Daten zurückgekommen, okay?

49
00:02:01,050 --> 00:02:03,480
‫An dieser Stelle haben wir also bereits ein Versprechen, mit

50
00:02:03,480 --> 00:02:04,750
‫dem wir arbeiten können.

51
00:02:04,750 --> 00:02:07,470
‫Jetzt müssen wir sie nur noch konsumieren, was im

52
00:02:07,470 --> 00:02:10,350
‫Grunde bedeutet, dass wir darauf warten, dass sie mit

53
00:02:10,350 --> 00:02:11,470
‫den Daten zurückkommt.

54
00:02:11,470 --> 00:02:14,513
‫Und dazu verwenden wir die then-Methode.

55
00:02:15,710 --> 00:02:19,650
‫Alles, was wir tun, ist also, hier und

56
00:02:19,650 --> 00:02:22,950
‫dann eine Callback-Funktion zu verwenden.

57
00:02:22,950 --> 00:02:25,730
‫Diese Callback-Funktion wird dann aufgerufen, sobald das

58
00:02:25,730 --> 00:02:29,740
‫Promise seine Arbeit erledigt hat und mit den Daten

59
00:02:29,740 --> 00:02:30,980
‫zurückgekommen ist.

60
00:02:30,980 --> 00:02:33,520
‫Und diese Daten stehen dann als Argument für diesen

61
00:02:33,520 --> 00:02:34,630
‫Rückruf zur Verfügung.

62
00:02:34,630 --> 00:02:36,380
‫Das nenne ich jetzt gerne das Ergebnis.

63
00:02:39,270 --> 00:02:42,140
‫Und so haben wir dann wieder in dieser Callback-Funktion,

64
00:02:42,140 --> 00:02:44,690
‫die wir hier haben, diese Daten verfügbar.

65
00:02:44,690 --> 00:02:47,962
‫Nehmen wir also all das hier und fügen

66
00:02:47,962 --> 00:02:50,830
‫es in diese Callback-Funktion ein und

67
00:02:50,830 --> 00:02:52,423
‫entfernen es tatsächlich.

68
00:02:53,530 --> 00:02:55,350
‫Also brauchen wir das nicht

69
00:02:55,350 --> 00:02:57,110
‫mehr und sparen es.

70
00:02:57,110 --> 00:03:00,380
‫Jetzt denken Sie vielleicht, wir verwenden

71
00:03:00,380 --> 00:03:04,510
‫hier immer noch Rückrufe, und ja, das stimmt tatsächlich.

72
00:03:04,510 --> 00:03:07,650
‫Dies sieht im Moment also nicht nach einer großen Änderung

73
00:03:07,650 --> 00:03:10,530
‫aus, aber nachdem wir das gesamte Beispiel hier in

74
00:03:10,530 --> 00:03:11,770
‫Versprechen umgewandelt haben,

75
00:03:11,770 --> 00:03:15,657
‫werden Sie die großen Auswirkungen sehen, die Versprechen auf unseren Code haben werden.

76
00:03:15,657 --> 00:03:19,320
‫Das heißt, wenn wir mehrere Promises haben, können

77
00:03:19,320 --> 00:03:22,700
‫wir diese Callbacks miteinander verketten, anstatt sie

78
00:03:22,700 --> 00:03:24,150
‫zu verschachteln.

79
00:03:24,150 --> 00:03:26,343
‫Was schon eine enorme Verbesserung ist.

80
00:03:27,370 --> 00:03:29,520
‫Eine Sache, die ich vorhin vergessen habe,

81
00:03:29,520 --> 00:03:32,850
‫ist, dass ein Versprechen, sobald es mit den Daten zurückkommt,

82
00:03:32,850 --> 00:03:34,980
‫als aufgelöstes Versprechen bezeichnet wird.

83
00:03:34,980 --> 00:03:37,180
‫Am Anfang ist es also ein ausstehendes Versprechen

84
00:03:37,180 --> 00:03:39,160
‫und wenn es die Daten erfolgreich

85
00:03:39,160 --> 00:03:41,180
‫erhält, ist es dann ein gelöstes Versprechen.

86
00:03:41,180 --> 00:03:44,600
‫Eine aufgelöste Zusage ist jedoch möglicherweise nicht immer

87
00:03:44,600 --> 00:03:47,670
‫erfolgreich, da möglicherweise ein Fehler aufgetreten ist.

88
00:03:47,670 --> 00:03:50,895
‫Wir sagen also, dass ein gelöstes Versprechen entweder erfüllt

89
00:03:50,895 --> 00:03:52,510
‫oder abgelehnt werden kann.

90
00:03:52,510 --> 00:03:55,680
‫Das erfüllte Versprechen hat tatsächlich ein Ergebnis, das wir

91
00:03:55,680 --> 00:03:56,513
‫nutzen wollen.

92
00:03:56,513 --> 00:04:00,860
‫Bei einer abgelehnten Zusage ist ein Fehler aufgetreten.

93
00:04:00,860 --> 00:04:03,050
‫Erinnern Sie sich also an die Situation,

94
00:04:03,050 --> 00:04:05,950
‫die wir vorher hatten, in der wir eine falsche Hunderasse hatten.

95
00:04:05,950 --> 00:04:07,750
‫In diesem Fall hatten wir

96
00:04:07,750 --> 00:04:11,840
‫also einen Fehler, und wir haben diesen Fehler mit diesem Codestück hier behandelt.

97
00:04:11,840 --> 00:04:12,673
‫Okay.

98
00:04:12,673 --> 00:04:14,980
‫Die Sache mit dieser then-Methode hier

99
00:04:14,980 --> 00:04:18,160
‫ist, dass sie eigentlich nur erfüllte Versprechen verarbeitet, aber

100
00:04:18,160 --> 00:04:20,770
‫nichts tut, wenn ein Fehler aufgetreten ist,

101
00:04:20,770 --> 00:04:23,640
‫denn dafür haben wir tatsächlich eine andere Methode.

102
00:04:23,640 --> 00:04:25,790
‫Also ein anderer Mechanismus, um damit umzugehen.

103
00:04:25,790 --> 00:04:27,840
‫Und das ist die Fangmethode.

104
00:04:27,840 --> 00:04:29,960
‫Also können wir direkt nach der

105
00:04:29,960 --> 00:04:32,753
‫Methode then eine weitere Methode namens catch verketten.

106
00:04:34,390 --> 00:04:35,223
‫Okay.

107
00:04:35,223 --> 00:04:38,350
‫Und so wird dieser aufgerufen, wenn ein Fehler aufgetreten ist.

108
00:04:38,350 --> 00:04:42,243
‫Hier drin haben wir also tatsächlich Zugriff auf dieses Fehlerobjekt.

109
00:04:44,480 --> 00:04:46,640
‫Also lasst uns jetzt weitermachen,

110
00:04:46,640 --> 00:04:48,590
‫dieses Stück Code nehmen und

111
00:04:48,590 --> 00:04:49,423
‫hier

112
00:04:49,423 --> 00:04:52,290
‫ablegen, und jetzt können wir es loswerden.

113
00:04:52,290 --> 00:04:54,310
‫Denn eigentlich haben wir in dieser

114
00:04:54,310 --> 00:04:56,330
‫Then-Methode keine Informationen, ob ein

115
00:04:56,330 --> 00:04:59,000
‫Fehler aufgetreten ist oder nicht, da sie immer

116
00:04:59,000 --> 00:05:01,620
‫nur aufgerufen wird, wenn das Promise erfolgreich war.

117
00:05:01,620 --> 00:05:03,440
‫Also wenn es ein erfülltes Versprechen ist.

118
00:05:03,440 --> 00:05:07,120
‫Okay, es ist also nett, diese beiden Fälle für

119
00:05:07,120 --> 00:05:09,870
‫uns tatsächlich automatisch zu trennen.

120
00:05:09,870 --> 00:05:12,400
‫Anstatt also diese seltsame Handhabung wie

121
00:05:12,400 --> 00:05:13,470
‫zuvor zu

122
00:05:13,470 --> 00:05:17,400
‫haben, können wir einfach die gesamte Logik für den erfolgreichen Fall

123
00:05:17,400 --> 00:05:19,080
‫schreiben, der am üblichsten

124
00:05:19,080 --> 00:05:21,900
‫ist, da wir normalerweise erwarten, dass alles gut

125
00:05:21,900 --> 00:05:24,550
‫funktioniert, aber falls ein Fehler aufgetreten ist,

126
00:05:24,550 --> 00:05:29,336
‫können wir Eingaben machen einige andere Logik hier unten in diesen Fehlerhandler hier.

127
00:05:29,336 --> 00:05:32,370
‫Also halten wir das schön getrennt.

128
00:05:32,370 --> 00:05:33,853
‫Lass es uns hier nochmal ändern.

129
00:05:36,030 --> 00:05:38,493
‫Geben Sie diesem einen weiteren Speichervorgang, um ihn erneut auszuführen.

130
00:05:39,450 --> 00:05:41,710
‫Hier haben wir also Not Found,

131
00:05:41,710 --> 00:05:45,720
‫und Sie sehen, dass es tatsächlich diese catch-Methode hier eingegeben hat

132
00:05:45,720 --> 00:05:47,860
‫und keines der Dinge getan

133
00:05:47,860 --> 00:05:50,270
‫hat, die in dieser then-Methode enthalten sind.

134
00:05:50,270 --> 00:05:52,980
‫Jetzt mach weiter und repariere das hier, schließe

135
00:05:52,980 --> 00:05:53,813
‫es,

136
00:05:53,813 --> 00:05:54,900
‫speichere das hier

137
00:05:54,900 --> 00:05:55,910
‫und los gehts.

138
00:05:55,910 --> 00:05:58,620
‫So konsumieren wir Versprechen.

139
00:05:58,620 --> 00:06:01,870
‫Also haben wir

140
00:06:01,870 --> 00:06:04,280
‫hier mit

141
00:06:04,280 --> 00:06:06,160
‫dieser

142
00:06:06,160 --> 00:06:08,810
‫Methode begonnen,

143
00:06:08,810 --> 00:06:12,060
‫die ein Promise

144
00:06:12,060 --> 00:06:16,090
‫zurückgegeben hat usw. Versprechen.

145
00:06:16,090 --> 00:06:19,860
‫Aber wie ich schon sagte, diese Art sieht immer noch aus

146
00:06:19,860 --> 00:06:20,930
‫wie früher.

147
00:06:20,930 --> 00:06:21,763
‫Richtig?

148
00:06:21,763 --> 00:06:25,000
‫Wir haben also immer noch diese Callback-Funktion

149
00:06:26,180 --> 00:06:28,440
‫hier oben, also all diese

150
00:06:28,440 --> 00:06:32,520
‫Callback-Funktion und auch hier in unserer Methode then haben wir

151
00:06:32,520 --> 00:06:34,600
‫diese Callback-Funktion von writeFile.

152
00:06:34,600 --> 00:06:37,663
‫Also lass uns weitermachen und das gleich im nächsten Video beheben.

