JavaScript ist durch Asynchronität gekennzeichnet. JavaScript kann es kaum erwarten. Wenn Sie etwas implementieren, auf das gewartet werden muss, können Sie dort nicht anhalten und darauf warten, dass das Ergebnis zurückkommt. Im Gegenteil, das Endergebnis besteht darin, einen Callback -Rückruf zu verwenden: Sie definieren eine Funktion, die nur aufgerufen werden kann, bis das Ergebnis verfügbar ist.
Dieses Rückrufmodell hat kein Problem mit der guten Codeorganisation, kann aber auch viele Probleme lösen, indem sie vom ursprünglichen Rückruf zum Versprechen wechseln. Behandeln Sie Promise als Standard-Datencontainer, der Ihre Codeorganisation vereinfacht und zu einer vielversprechenden Architektur wird.
Was ist ein Versprechen?
Ein Versprechen ist ein Objekt mit der Methode ".then ()", die das Ergebnis einer Operation darstellt, die möglicherweise noch nicht bekannt ist. Unabhängig davon, wer auf dieses Objekt zugreift, kann er die Methode ".then ()" verwenden, um einen Rückruf hinzuzufügen, um zu warten, bis eine Erinnerung darauf wartet, dass der Vorgang ein erfolgreiches Ergebnis oder Misserfolg hat.
Warum sind die Vorteile, dies besser zu machen als Rückrufe? Der Standard -Rückrufmodus erfordert, dass wir Callback -Funktionen gleichzeitig angeben, wenn die Anforderungen bearbeitet werden:
Request (URL, Funktion (Fehler, Antwort) {// Erfolg oder Fehler verwandeln.}); dosomethingelse ();Leider bedeutet dieser Code, dass diese Anforderungsfunktion nicht weiß, wann er von selbst abgeschlossen wird, und natürlich ist dies nicht erforderlich. Wir verabschieden das Ergebnis endlich über den Rückruf. Dies führt dazu, dass mehrere Rückrufe verschachtelte Rückrufe oder Rückruffallen bilden.
QueryThedatabase (Abfrage, Funktion (Fehler, Ergebnis) {Request (URL, Funktion (Fehler, Antwort) {doSoMETHETELSE (Antwort, Funktion (Fehler, Ergebnis) {doanotherthing (Ergebnis, Funktion (Fehler, Ergebnis) {request (andereurl, Funktion (Fehler) {...});});});});});});});});});});Versprechen kann dieses Problem lösen, indem er ermöglicht, dass Code mit niedrigem Niveau eine Anfrage erstellt und dann ein Objekt zurückgibt, das einen unvollendeten Betrieb darstellt, sodass der Anrufer entscheiden kann, welche Rückrufe hinzugefügt werden sollen.
Was ist ein Versprechen?
Versprechen ist eine Abstraktion der asynchronen Programmierung. Es ist ein Proxy -Objekt, das einen Wert zurückgibt oder eine Ausnahme ausgelegt hat. Im Allgemeinen haben Versprechen Objekte eine damalige Methode. Diese dann Methode ist, wie wir den Rückgabewert erhalten (der Ergebniswert der erfolgreichen Umsetzung des Versprechens wird als Erfüllung bezeichnet) oder eine Ausnahme (der Grund für die Ablehnung des Versprechens wird als Ablehnung bezeichnet). Verwenden Sie dann zwei optionale Rückrufe als Parameter, die wir als überfüllte und onrejected bezeichnen können:
var doomthethethingaync ()
Versprechen.
Wenn dieses Versprechen gelöst wird, wird nach Abschluss des asynchronen Prozesses entweder aufgeladen und aufgerufen.
Daher hat ein Versprechen die folgenden drei verschiedenen Zustände:
■ bis versprochen werden - Anfangszustand des Versprechens
■ Erfüllte Implementierungsverpflichtung-ein Engagement erfolgreicher Umsetzungszustand
■ Ablehre die Ablehnung des Engagements - ein Staat, in dem Versprechen fehlgeschlagen ist
Wenn Sie die Lesedatei als Fall übernehmen, sollte nach dem Lesen der Datei mit einem Rückruf (Ausgabedruck) erledigt werden:
ReadFile (Funktion (err, data) {if (err) return console.Error (err) console.log (data)})Wenn unsere ReadFile -Funktion ein Versprechen zurückgibt, können wir dieselbe Logik wie folgt implementieren (Ausgangsdruck):
var dadurch = ReadFile ()
danach (console.log, console.Error)
Hier haben wir ein Wertversprechen, das eine asynchrone Operation darstellt. Wir können dieses Wertversprechen ständig übergeben. Jeder, der auf diesen Wert zugreift, kann dann verwenden, um ihn zu konsumieren. Unabhängig davon, ob der durch diesen Wert dargestellte asynchrone Operation abgeschlossen ist oder nicht abgeschlossen ist, können wir auch sicherstellen, dass sich das asynchrone Ergebnis nicht ändert, da sich die durch dieses Versprechen dargestellte asynchrone Operation nur einmal ausgeführt wird und der Staat entweder erfüllt oder abgelehnt wird.
Versprechen verstehen
Versprechen kann sich von der täglichen Intuition unterscheiden. Um es zu verstehen, müssen einige wichtige Prinzipien berücksichtigt werden: .Then () gibt immer ein neues Versprechen zurück. Wie im folgenden Code gezeigt:
var dadurch = ReadFile ()
var dadem2 = danach (readanotherfile, console.Error)
Hier repräsentiert der damalige Parameter Readanotherfile Console.Error die nach dem erfolgreiche Operation erfolgreiche asynchrone Operation die Aktion, die nach dem Erfolg des Versagens erfolgreich ist. Das heißt, nachdem die Funktion readanotherfile ausgeführt wurde, ist der fehlgeschlagene Druckdatensatz ansonsten falsch. Diese Implementierung ist nur auf zwei Arten möglich.
Schauen wir uns den folgenden Code an:
var dadurch Ausführungsergebnis der Readanotherfile -Funktion
Da dann ein Versprechen zurückgibt, bedeutet dies, dass das Versprechen ausgewendet werden kann, indem die Serienkette verkettet wird, was eine Callback -Hölle vermeiden kann:
ReadFile () .then (readanotherfile) .then (dosomethingelse) .then (...)
Es gibt zwei Teile der Versprechenregel, die getrennt werden müssen:
(1) .Then () gibt immer ein neues Versprechen zurück. Jedes Mal, wenn Sie es nennen, spielt es keine Rolle, was der Rückruf tut, da. Dann () gibt es Ihnen bereits ein Versprechen, bevor der Rückruf aufgerufen wird. Das Verhalten des Rückrufs wirkt sich nur auf die Umsetzung des Versprechens aus. Wenn der Rückruf einen Wert zurückgibt, verwendet das Versprechen diesen Wert. Wenn dieser Wert ein Versprechen ist, geben Sie den Wert nach der Umsetzung des Versprechens an diesen Wert zurück. Wenn der Rückruf einen Fehler verursacht, lehnt das Versprechen den Fehler ab.
(2) Das von .Then () zurückgegebene Versprechen ist ein neues Versprechen, das sich von denen unterscheidet, dann () genannt. Die lange Kette von Versprechen verbirgt manchmal die Tatsache, dass, egal was passiert, jeder. Dann () Anruf ein neues Versprechen ergeben wird. Was Sie hier beachten müssen, ist, dass Sie wirklich berücksichtigen müssen, dass Ihr letzter Anruf. Dann () ein Fehler darstellen. Wenn Sie also diesen Fehler nicht fangen, ist es einfach, Ihre Fehlerausnahme zu verschwinden.
Einige Leute denken, dass der Aufruf.
Funktion getTasks () {return $ http.get ('http://example.com/api/v1/tasks') .then (Funktion (Antwort) {return response.data; });}In diesem Beispiel erhalten die beiden Funktionen jeweils ein Versprechen und haben eine Rückruffunktion.
Interessantes Versprechen
Das gleiche Versprechen kann eine beliebige Anzahl von Rückrufen akzeptieren. Wenn ein Versprechen gelöst und implementiert wird, werden alle Rückruffunktionen aufgerufen. Darüber hinaus kann ein Versprechen nach der Lösung und Implementierung sogar einen neuen Rückruf akzeptieren. Diese Rückrufe können auf normale Weise aufgerufen werden, sodass wir Rückrufe verwenden können, um eine einfache Cache -Form zu implementieren:
var taskspromise; Funktion GetTasks () {TaskPromise = TaskPromise || GetsTasks vonTheserver (); Taskpromise zurückgeben;}In diesem Fall kann die Funktion von Gettasks () auf jeden Fall aufgerufen werden. Sie wird immer das Versprechen der Kupferzähne zurückgegeben, wobei die Funktion von GetTasks von TheServer () nur einmal aufgerufen wird.
Die Verwendung von NodeJS -Versprechen oben ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, Sie können Ihnen eine Referenz geben und ich hoffe, Sie können wulin.com mehr unterstützen.