JavaScript verspricht ein Tutorial mit Beispielen

JavaScript verspricht ein Tutorial mit Beispielen

Während dies zuvor über Bibliotheken von Drittanbietern verfügbar ist, wurden Versprechen in JavaScript als Native eingeführt
Feature mit ECMascript6.

Sie bieten eine Alternative zu Rückrufen im Umgang mit asynchronem Code, der bereitgestellt wird,
Unter den anderen Dingen eine sauberere Art, Fehler umzugehen. In diesem Tutorial werden wir sehen, wie Versprechen funktionieren, wie es zu
Erstellen Sie sie und wie Sie ihre Methoden verwenden.

In diesem Tutorial lernen Sie:

  • Was ist ein JavaScript -Versprechen.
  • So erstellen Sie ein JavaScript -Versprechen.
  • Wie Versprechen verwendet werden können, um asynchrone Code zu verwalten.
  • Was sind die Methoden, die mit einem Versprechen verwendet werden können?.

Softwareanforderungen und Konventionen verwendet

Softwareanforderungen und Linux -Befehlszeilenkonventionen
Kategorie Anforderungen, Konventionen oder Softwareversion verwendet
System Betriebssystem agnostisch.
Software Eine Installation von Knoten Um dieses Tutorial in einer Nicht-Browser-Umgebung zu verfolgen.
Andere Kenntnis von JavaScript und objektorientierten Konzepten.
Konventionen # - erfordert, dass gegebene Linux -Befehle mit Root -Berechtigungen entweder direkt als Stammbenutzer oder mit Verwendung von ausgeführt werden können sudo Befehl
$ - Erfordert, dass die angegebenen Linux-Befehle als regelmäßiger nicht privilegierter Benutzer ausgeführt werden können

Was ist ein "Versprechen"?

In JavaScript, a versprechen ist ein Objekt, das als Ergebnis von zurückgegeben wird
eine asynchrone, nicht blockierende Operation, wie zum Beispiel die von der durchgeführte bringen
integrierte Funktion. Versprechen wurden als native Merkmal mit Ecmascript6: Sie repräsentieren a
Reinigere Alternative zu Rückrufen, dank Funktionen wie Methodenketten und der Tatsache, dass sie a bereitstellen
Möglichkeit zum Verwalten von Fehlern, die der Ausnahmebehandlung im Synchroncode ähneln. Es gibt drei Staaten versprochen
kann in:

  • Ausstehend
  • Beschlossen
  • Abgelehnt

Wie der Name schon sagt, sagen wir, dass ein Versprechen ist ausstehend Wenn sein Ergebnis noch nicht entschieden wurde,
Es kann also immer noch gelöst oder abgelehnt werden. Wir sagen, dass ein Versprechen ist erfüllt Wenn der Asynchron
Die Operation war erfolgreich: Das Versprechen wurde gelöst und enthält das Ergebnis der Operation selbst.
Schließlich soll ein Versprechen sein abgelehnt Wenn die asynchrone Operation fehlschlägt: in diesem Fall die
Das Versprechen wird den Grund für den Fehler enthalten.

Erstellen eines JavaScript -Versprechens



Wie oben erwähnt, wie einige Funktionen, die asynchrone Operationen ausführen, wie wie bringen, zurückkehren
Ein Versprechen standardmäßig, sodass wir die Methoden und die Muster verwenden können, die wir später in diesem Tutorial in der Box beschreiben werden. Andere Funktionen
Unterstützt noch keine Versprechen, daher möchten wir vielleicht ein Versprechen um sie herum schaffen. Der Konstruktor eines Versprechens nimmt ein Argument auf,
Welches ist eine Rückruffunktion, die selbst zwei Argumente nimmt: die beschließen Und ablehnen Rückrufe, welche
werden aufgerufen, um das Versprechen zu lösen oder abzulehnen. Sehen wir uns ein kurzes Beispiel dafür an, wie Sie ein triviales Versprechen erstellen können:

const Promise = New Promise (Funktion (Resolve, Ablehnung) setTimeout (Resolve, 100, 'Erfolg!'); ); 

Mit dem obigen Code haben wir ein Versprechen erstellt, das tatsächlich immer gelöst wird, weil sie die Verwendung des
setTimeout Funktion, wir nennen die beschließen Rückruf nach einer Auszeit von 100 Millisekunden,
den String „Erfolg übergeben“!”Als alleinige Argument des Rückrufs. Ebenso, wenn wir das Versprechen wollten
Um abgelehnt zu werden, hätten wir die anrufen sollen ablehnen Ruf zurück. Offensichtlich ein Versprechen wie das
Einer oben ist für uns nicht sehr nützlich, daher werden wir jetzt versuchen, ein Versprechen über eine tatsächlich nützliche Funktion zu erstellen.

Der Readfile Methode der fs Modul, asynchron liest den Inhalt einer Datei und
Nimmt drei Argumente an: Zwei von ihnen sind obligatorisch und einer ist optional. Das erste Argument ist der Pfad der Datei
gelesen werden. Das zweite Argument ist optional, und damit können wir beispielsweise die angeben
Codierung benutzt werden. Das dritte Argument ist eine Rückruffunktion, die selbst zwei Argumente nimmt:
irren Und Daten.

Wenn die Leseoperation fehlschlägt, enthält das erste Argument eine Fehler
Objekt und der zweite werden undefiniert; Wenn die Operation erfolgreich ist, wird stattdessen das zweite Argument a sein
Zeichenfolge, die den Inhalt der Datei darstellt, oder eines Rohpuffer
Sei Null. Sagen Sie zum Beispiel, ich möchte meine lesen .vimrc Datei mit dieser Funktion:

const fs = erfordern ('fs'); fs.ReadFile ('.VIMRC ',' UTF-8 ', Funktion (err, data) if (err) throw err Konsole.Logdaten) ); 


Erstens brauchten wir das fs Modul und zugewiesen es dem fs konstant, als
Wir gingen fort und berufen die Readfile Methode. In dem als letzten Argument der Funktion akzeptierten Rückruf führen wir aus
Die erforderlichen Operationen je nach Ergebnis wurden abhängig. Im obigen Code wir Wurf Eine Ausnahme, wenn ein Fehler auftritt
Beim Versuch, die Datei zu lesen, drucken wir den Dateiinhalt, wenn alles wie erwartet läuft. In diesem Fall wäre dies
Das (verkürzte) Ergebnis:

[…] Set FileFormat = UNIX SET textwidth = 79 Set NoSwaPFile Set foldMethod = Eingeklagter Set foldLevel = 99 Set Splitright Set SplitBelow Set hlSearch Set IncSearch Set ignoreCase set SmartCase […] 

Die Methode, die wir gerade verwendet haben, Readfile, führt die Leseoperation asynchron durch, sodass es nicht blockiert. Standardmäßig nicht,
Unterstützungsversprechen jedoch. Wenn wir die Verwendung dieser Methode „verärgern“ wollen, sollten wir ein Versprechen alleine schaffen:

const fs = erfordern ('fs'); Funktion ReadFilePromise (Filepath) Neue Versprechen zurückgeben (Funktion (Resolve, Ablehnung) fs.ReadFile (filepath, 'utf-8', function (err, data) if (err) reject (err); else resolve (data);); );  

Schauen Sie sich den obigen Code an, was haben wir geändert? Wir haben die erstellt ReadFilePromise Funktion: Innerhalb davon
ein Versprechen basierend auf dem Ergebnis der fs.Readfile Die Methode wird erstellt und zurückgegeben. Im vorherigen Beispiel,
Wir haben den Code angepasst, um eine Ausnahme zu machen, wenn ein Fehler in der Lesevorrichtung vorhanden war: In diesem Fall stattdessen, da wir
bauen ein Versprechen, wenn ein Fehler auftritt ablehnen Rückruf, den Fehler als alleiniges Argument übergeben,
auf diese Weise das Versprechen ablehnen. Wenn die Lesevorrichtung erfolgreich durchgeführt wird, rufen wir stattdessen an beschließen, Vorbeigehen
Die Daten, die sich aus der Leseoperation als Argument ergeben, und so das Versprechen erfüllen. Im nächsten Absatz werden wir sehen, wie
Um das Versprechen zu konsumieren, das wir gerade erstellt haben.



Versprechen Methoden

Ein Versprechensobjekt wäre nicht nützlich, wenn wir keine Möglichkeiten hätten, damit zu interagieren und es zu konsumieren. In diesem Abschnitt werden wir
Beschreiben Sie die Methoden, die wir für das Versprechensobjekt anwenden können. Jede dieser Methoden funktioniert auf ein Versprechen und gibt wiederum ein Versprechen zurück
selbst, damit wir eine „Stapel“ erstellen und Methode durchführen können Verkettung.

Der Dann Methode

Der Dann Die Methode nimmt zwei Argumente auf
wird erfüllt und wenn es abgelehnt wird, und ein Versprechen zurückgibt. Wenn wir uns mit dem obigen Beispiel halten, können wir diese Methode verwenden
mit dem Versprechen zu interagieren, das zurückgegeben wurde, wenn wir das anrufen ReadFilePromise Funktion:

ReadFilePromise ('.vimrc ').Dann (Funktion onResolveCallback (Daten) Konsole.Logdaten); , Funktion OnRejectCallback (Grund) Konsole.log ('Die Fehlermeldung ist $ Grund'); ) 

Wenn das Versprechen das verlässt ausstehend Zustand, und so wird es entweder gelöst oder abgelehnt, die Dann Methode seine
hingerichtet. Wenn das Versprechen gelöst wird, hat der erste Rückruf (in diesem Fall haben wir die Rückrufe benannt, um ihre Rollen zu verstehen, um es einfacher zu verstehen)
wird ausgeführt, sein Argument, das das Ergebnis der asynchronen Operation hält (in diesem Fall der Inhalt des “.vimrc ”Datei als Zeichenfolge).
Wenn das Versprechen abgelehnt wird, würde stattdessen der zweite Rückruf (wir haben es OnRejectCallback benannt) ausgeführt: Sein Argument enthält den Fehler
Dies führte dazu, dass die Leseoperation scheiterte.

Der fangen Methode

nicht wie Dann, Das behandelt beide, wenn ein Versprechen gelöst und abgelehnt wird, die fangen Methode ist genauer,
und befasst sich nur mit dem letzteren Fall. Die Verwendung dieser Methode entspricht der Verwendung Dann mit nicht definiert als die
Erstes Argument, anstelle des Rückrufs, der verwendet wird, um den Fall zu behandeln, wenn das Versprechen erfüllt ist, und mit einem gültigen Rückruf, um die zu verarbeiten
Fall, wenn das Versprechen abgelehnt wird, als der zweite. Diese Methode gibt ein Versprechen zurück, und durch die Verwendung können wir den obigen Code über diese Weise neu schreiben:



ReadFilePromise ('.VIMRC ') // Innen' Dann ',' Wir verwalten den Fall, wenn das Versprechen erfüllt ist, um // mit möglichen Fehlern in 'Catch' zu handeln .Dann (Funktion (Daten) Konsole.Logdaten); ) .fangen (Funktion (Grund) Konsole.log ('Die Fehlermeldung ist $ Grund'); ) 

Beobachten, wie wir das angehängt haben fangen Methode nach Dann: Das ist möglich
Denn wie oben erwähnt, gibt jede Methode selbst ein Versprechen zurück und kann so angekettet werden.

Der Endlich Methode

Als die Methoden, die wir oben gesehen haben, Endlich Gibt ein Versprechen zurück. Es wird immer unabhängig vom Zustand des Versprechens ausgeführt,
Beide, wenn es gelöst oder abgelehnt wird. Aus diesem Grund nimmt der Rückruf keine Argumente vor, da es beim Laufen keine Möglichkeit gibt, zu bestimmen
Wenn das Versprechen abgelehnt oder gelöst wurde. Wir verwenden diese Methode, wenn wir Generic Code ausführen möchten, der in jedem Fall ausgeführt werden soll.

ReadFilePromise ('.vimrc ') .Dann (Funktion (Daten) Konsole.Logdaten); ) .fangen (Funktion (Grund) Konsole.log ('Die Fehlermeldung ist $ Grund'); ) .Schließlich (function () Konsole.Protokoll ("Ich bin immer ausgeführt!");) 

Im obigen Beispiel, ob das Versprechen gelöst oder abgelehnt wird, wird die Zeichenfolge „Ich werde immer ausgeführt!Es ist auf der Konsole gedruckt.

Der Wettrennen Methode

Diese Methode nimmt ein iterables (zum Beispiel ein Array) als Argument an. Es gibt ein Versprechen zurück, das so schnell wie a gelöst oder abgelehnt wird
Versprechen im iterablen, existiert der anstehende Zustand und wird entweder abgelehnt oder gelöst. Das zurückgegebene Versprechen wird das haben
Erfüllungswert oder der Ablehnungsgrund des Versprechens.



const p1 = neues Versprechen (Funktion (Resolve, Ablehnung) setTimeout (Resolve, 100, 'gelöst!'); ); const p2 = neues Versprechen (Funktion (Auflösung, Ablehnung) setTimeout (Ablehnung, 50, 'abgelehnt!'); ); Versprechen.Rasse ([P1, P2]) .Dann (Funktion (Daten) Konsole.Logdaten); ) .fangen (Funktion (Grund) Konsole.Protokoll (Grund); ) 

In diesem Beispiel haben wir zwei neue Versprechen erstellt: die erste, P1, wird nach 100 Millisekunden gelöst;
der zweite, p2, wird nach 50 Millisekunden abgelehnt. Wir haben eine iterable, die beide Versprechen als die enthielt
alleinige Argumentation der Versprechen.Wettrennen Methode. Wenn wir den obigen Code ausführen, erhalten wir das folgende Ergebnis:

abgelehnt!

Was ist passiert? Wie erwartet die p2 Versprechen ist das erste, das sich niederlassen (es wird abgelehnt), folglich das Versprechen
zurückgegeben von der Versprechen.Wettrennen Methode, ablehnt mit dem gleichen Grund ab. Wie Sie sehen können, ist der Zustand des Versprechens nicht relevant:
der erste, der tatsächlich einen anderen Status als erhält als ausstehend ist derjenige, der zählt.

Der alle Methode

Wie Wettrennen, Die alle Methode nimmt ein iterable als alleinige Argumentation. Es gibt ein Versprechen zurück, das
wird auflösen, sobald alle im iterablen enthalten
aus dem Grund des ersten Versprechens im iterablen Ablehnen ablehnen, das ablehnen wird. Zum Beispiel:

const p1 = neues Versprechen (Funktion (Resolve, Reject) setTimeout (Resolve, 100, P1 gelöst!'); ) const p2 = neues Versprechen (Funktion (Auflösung, Ablehnung) setTimeout (Resolve, 100, 'P2 aufgelöst!'); ) Versprechen.alle ([p1, p2]) .Dann (Funktion (Werte) Konsole.log (Werte); ) 

Der obige Code wird zurückgegeben:

['P1 gelöst!',' P2 löste sich!']

Alle Versprechen, die im iterablen gelöst enthalten sind alle Methode
Auch aufgelöst, sein Wert ist ein Array, das die Werte aller gelösten Versprechen enthält. Wenn einer (bald) eines der Versprechen
In den iterablen Ablehnungen, die von der Methode zurückgegeben wurden, lehnt es ebenfalls aus dem gleichen Grund ab. Wenn das iterable als Argument verabschiedet wurde
War leer, ein bereits entschlossenes Versprechen wäre zurückgegeben worden. Wenn das iterable keine Versprechen enthielt, wäre die Methode zurückgekehrt
ein asynchron gelöstes Versprechen oder ein bereits gelöstes versprochenes Versprechen, abhängig von der Umgebung.



Der beschließen Und ablehnen Methoden

Diese beiden Methoden sind selbsterklärend.

Der beschließen Die Methode nimmt ein Argument an, das der Wert ist, der durch das Versprechen gelöst werden muss.
Es gibt ein Versprechen zurück, das mit diesem Wert gelöst wird. Der ablehnen Die Methode nimmt in ähnlicher Weise ein Argument an, mit dem der Grund der Grund ist
Das Versprechen sollte abgelehnt werden und gibt ein Versprechen zurück, das mit dem gegebenen Grund abgelehnt wird. Zum Beispiel:

// ein Versprechen versprechen, ein Versprechen zu lösen.Auflösung ('gelöster Wert'); // Ein Versprechen versprechen.ablehnen ('Grund zur Ablehnung'); 

Schlussfolgerungen

In diesem Tutorial haben wir gelernt, Versprechungen in JavaScript zu kennen und zu verwenden. Wir haben gesehen, wie wir unsere eigenen Versprechen aufbauen können, was sind die damit verbundenen Methoden
Mit einem Versprechen und wie können wir damit asynchrone Code als sauberere Alternative zu Rückrufen verwalten. Eine gültige Quelle, um weiter zu erhöhen
Ihr Wissen über Versprechen ist das, das von Mozilla bereitgestellt wird.
Im nächsten JavaScript -Tutorial lernen wir, wie man benutzt Pfeilfunktionen. Bleiben Sie auf Linuxconfig dran.Org!

Verwandte Linux -Tutorials:

  • So erstellen Sie eine Tkinter -Anwendung mithilfe eines objektorientierten…
  • GDB -Debugging -Tutorial für Anfänger
  • Wie man mit der Woocommerce -REST -API mit Python arbeitet
  • Python reguläre Ausdrücke mit Beispielen
  • Advanced Bash Regex mit Beispielen
  • Mastering -Bash -Skriptschleifen beherrschen
  • Verschachtelte Schleifen in Bash -Skripten
  • So richten Sie einen OpenVPN -Server auf Ubuntu 20 ein.04
  • Installieren Sie Arch Linux in VMware Workstation
  • Schleifen mit Beispielen verprügeln