‫Kursleiter: Fangen wir jetzt an
‫zu lernen, wie man die Callback-Hölle mit Versprechungen löst.
‫Und wir beginnen damit, dass wir anstelle des
‫Rückrufs ein Versprechen für die
‫Aufforderung zum Erscheinen des Agenten verwenden.
‫Und das wird funktionieren, weil die Superagent-Bibliothek tatsächlich
‫sofort einsatzbereite Versprechen unterstützt, und wir sie
‫hier einfach verwenden können.
‫Für Node-Funktionen, die aus internen Node-Paketen wie Read File stammen,
‫müssen wir das Promise tatsächlich selbst erstellen, und
‫das werden wir später in der nächsten Vorlesung oder
‫so tun.
‫Aber vorerst
‫möchte ich, dass Sie lernen, wie man Versprechen konsumiert
‫und erst später, wie man sie baut.
‫Okay, also beginnen wir
‫wieder mit der
‫Super-Agent-Bibliothek und genauer mit der Methode get hier.
‫Denn diese Methode hier gibt tatsächlich ein Versprechen zurück.
‫Ohne zu sehr ins Detail zu gehen, setzt ein
‫Versprechen im Wesentlichen das
‫Konzept eines zukünftigen Wertes um.
‫Im Grunde also ein Wert, von dem wir erwarten, dass er
‫irgendwann in der Zukunft erhalten wird, also
‫ist es ein bisschen so, als ob wir "Hey, Server"
‫oder "Hey, API, bitte besorge mir ein zufälliges Hundebild" im Hintergrund sagen und
‫lass Ich weiß, wann du bereit bist" und gib mir
‫dann diese Daten zurück. " Okay?
‫Dieses zufällige Bild ist also der Wert, den
‫wir irgendwann in der Zukunft erwarten.
‫Und das ist genau die Art von
‫Anfrage, die wir in diesem Beispiel mit einer
‫Super-Agent-Bibliothek durchführen.
‫Richtig.
‫Und die get-Methode, die wir wieder verwenden, gibt
‫automatisch und sofort ein Promise zurück, sobald wir die Anfrage
‫starten.
‫Das Versprechen hat also noch keinen
‫Wert, da der Server eigentlich noch asynchron
‫im Hintergrund die Daten vom Server holt, aber
‫das Versprechen ist sofort verfügbar
‫und verspricht uns grundsätzlich, dass er in Zukunft einige
‫Daten zurückbekommt.
‫Okay, macht das Sinn?
‫Und dieser Zustand des Versprechens ist in diesem Fall,
‫also gleich am Anfang, ein schwebendes Versprechen.
‫Es steht also noch aus, es
‫sind immer noch keine Daten zurückgekommen, okay?
‫An dieser Stelle haben wir also bereits ein Versprechen, mit
‫dem wir arbeiten können.
‫Jetzt müssen wir sie nur noch konsumieren, was im
‫Grunde bedeutet, dass wir darauf warten, dass sie mit
‫den Daten zurückkommt.
‫Und dazu verwenden wir die then-Methode.
‫Alles, was wir tun, ist also, hier und
‫dann eine Callback-Funktion zu verwenden.
‫Diese Callback-Funktion wird dann aufgerufen, sobald das
‫Promise seine Arbeit erledigt hat und mit den Daten
‫zurückgekommen ist.
‫Und diese Daten stehen dann als Argument für diesen
‫Rückruf zur Verfügung.
‫Das nenne ich jetzt gerne das Ergebnis.
‫Und so haben wir dann wieder in dieser Callback-Funktion,
‫die wir hier haben, diese Daten verfügbar.
‫Nehmen wir also all das hier und fügen
‫es in diese Callback-Funktion ein und
‫entfernen es tatsächlich.
‫Also brauchen wir das nicht
‫mehr und sparen es.
‫Jetzt denken Sie vielleicht, wir verwenden
‫hier immer noch Rückrufe, und ja, das stimmt tatsächlich.
‫Dies sieht im Moment also nicht nach einer großen Änderung
‫aus, aber nachdem wir das gesamte Beispiel hier in
‫Versprechen umgewandelt haben,
‫werden Sie die großen Auswirkungen sehen, die Versprechen auf unseren Code haben werden.
‫Das heißt, wenn wir mehrere Promises haben, können
‫wir diese Callbacks miteinander verketten, anstatt sie
‫zu verschachteln.
‫Was schon eine enorme Verbesserung ist.
‫Eine Sache, die ich vorhin vergessen habe,
‫ist, dass ein Versprechen, sobald es mit den Daten zurückkommt,
‫als aufgelöstes Versprechen bezeichnet wird.
‫Am Anfang ist es also ein ausstehendes Versprechen
‫und wenn es die Daten erfolgreich
‫erhält, ist es dann ein gelöstes Versprechen.
‫Eine aufgelöste Zusage ist jedoch möglicherweise nicht immer
‫erfolgreich, da möglicherweise ein Fehler aufgetreten ist.
‫Wir sagen also, dass ein gelöstes Versprechen entweder erfüllt
‫oder abgelehnt werden kann.
‫Das erfüllte Versprechen hat tatsächlich ein Ergebnis, das wir
‫nutzen wollen.
‫Bei einer abgelehnten Zusage ist ein Fehler aufgetreten.
‫Erinnern Sie sich also an die Situation,
‫die wir vorher hatten, in der wir eine falsche Hunderasse hatten.
‫In diesem Fall hatten wir
‫also einen Fehler, und wir haben diesen Fehler mit diesem Codestück hier behandelt.
‫Okay.
‫Die Sache mit dieser then-Methode hier
‫ist, dass sie eigentlich nur erfüllte Versprechen verarbeitet, aber
‫nichts tut, wenn ein Fehler aufgetreten ist,
‫denn dafür haben wir tatsächlich eine andere Methode.
‫Also ein anderer Mechanismus, um damit umzugehen.
‫Und das ist die Fangmethode.
‫Also können wir direkt nach der
‫Methode then eine weitere Methode namens catch verketten.
‫Okay.
‫Und so wird dieser aufgerufen, wenn ein Fehler aufgetreten ist.
‫Hier drin haben wir also tatsächlich Zugriff auf dieses Fehlerobjekt.
‫Also lasst uns jetzt weitermachen,
‫dieses Stück Code nehmen und
‫hier
‫ablegen, und jetzt können wir es loswerden.
‫Denn eigentlich haben wir in dieser
‫Then-Methode keine Informationen, ob ein
‫Fehler aufgetreten ist oder nicht, da sie immer
‫nur aufgerufen wird, wenn das Promise erfolgreich war.
‫Also wenn es ein erfülltes Versprechen ist.
‫Okay, es ist also nett, diese beiden Fälle für
‫uns tatsächlich automatisch zu trennen.
‫Anstatt also diese seltsame Handhabung wie
‫zuvor zu
‫haben, können wir einfach die gesamte Logik für den erfolgreichen Fall
‫schreiben, der am üblichsten
‫ist, da wir normalerweise erwarten, dass alles gut
‫funktioniert, aber falls ein Fehler aufgetreten ist,
‫können wir Eingaben machen einige andere Logik hier unten in diesen Fehlerhandler hier.
‫Also halten wir das schön getrennt.
‫Lass es uns hier nochmal ändern.
‫Geben Sie diesem einen weiteren Speichervorgang, um ihn erneut auszuführen.
‫Hier haben wir also Not Found,
‫und Sie sehen, dass es tatsächlich diese catch-Methode hier eingegeben hat
‫und keines der Dinge getan
‫hat, die in dieser then-Methode enthalten sind.
‫Jetzt mach weiter und repariere das hier, schließe
‫es,
‫speichere das hier
‫und los gehts.
‫So konsumieren wir Versprechen.
‫Also haben wir
‫hier mit
‫dieser
‫Methode begonnen,
‫die ein Promise
‫zurückgegeben hat usw. Versprechen.
‫Aber wie ich schon sagte, diese Art sieht immer noch aus
‫wie früher.
‫Richtig?
‫Wir haben also immer noch diese Callback-Funktion
‫hier oben, also all diese
‫Callback-Funktion und auch hier in unserer Methode then haben wir
‫diese Callback-Funktion von writeFile.
‫Also lass uns weitermachen und das gleich im nächsten Video beheben.