Die JavaScript-Programmierung beinhaltet häufig die Arbeit mit asynchronen Vorgängen. Durch die Asynchronität können Sie verschiedene Aufgaben parallel ausführen und den Hauptausführungsthread nicht blockieren. Eine Möglichkeit, mit asynchronen Aufgaben in JavaScript zu arbeiten, besteht darin, Promis zu verwenden.
Ein Promise ist ein Objekt, das einen Wert darstellt, auf den sofort oder später während eines asynchronen Vorgangs zugegriffen werden kann. Es kann in drei Zuständen vorliegen: ausstehend, abgeschlossen oder abgelehnt. Wenn sich promise im Status abgeschlossen befindet, bedeutet dies, dass der asynchrone Vorgang erfolgreich abgeschlossen wurde und das Ergebnis verfügbar ist.
Manchmal ist es notwendig, eine bereits ausgeführte Promise zu erstellen, die sich sofort im Status abgeschlossen befindet. Dies kann beispielsweise beim Modellieren von Daten oder beim Testen nützlich sein. Wie erstelle ich ein solches Versprechen? Dazu können Sie die statische Promise-Methode verwenden.resolve().
Die Promise-Methode.resolve() akzeptiert ein einzelnes Argument - einen Wert, der in einem bereits ausgeführten Promise verfügbar sein wird. Wenn das Argument ein bereits vorhandenes Promise ist, gibt es dieses Promise unverändert zurück. Das Ergebnis der Ausführung des Promise.resolve() wird ein neues Promise im Status abgeschlossen mit dem übergebenen Wert sein.
Was ist promise
Mit Promise können Sie asynchrone Vorgänge bequem verwalten und ihre Ergebnisse verarbeiten. Es bietet die Möglichkeit, eine Kette von Handlern auszuführen, die an eine Promis gebunden werden können und bei erfolgreicher Ausführung oder Ablehnung aufgerufen werden können.
Vorteile der Verwendung von Promise:
- Verbesserung der Lesbarkeit von Code "durch die Verwendung von Handlerketten wird eine tiefe Verschachtelung von Callbacks vermieden, wodurch der Code verständlicher und leichter zu pflegen ist.
- Verwenden einer einzigen Struktur für alle asynchronen Vorgänge - promise kann auf verschiedene Arten von asynchronen Operationen angewendet werden, was den Code vereinfacht und ihn konsistenter macht.
- Verwalten von Fehlern - durch die Möglichkeit, das Versprechen abzulehnen, können Sie Fehler im asynchronen Code überwachen und behandeln, wodurch eine Blockiersituation und eine Beschädigung des Anwendungszustands vermieden werden.
Das Erstellen eines bereits ausgeführten Promise kann in einigen Fällen nützlich sein, z. B. wenn Sie ein synchrones Verhalten bereitstellen oder das Ergebnis einer asynchronen Operation durch einen Dummy-Wert ersetzen möchten.
Definition und Anwendung
Promise ist ein Mechanismus in JavaScript, der es Ihnen ermöglicht, mit asynchronen Vorgängen wie dem Laden von Daten aus einem Netzwerk oder dem Ausführen komplexer Berechnungen zu arbeiten. Sie ermöglichen es Ihnen, den Codeausführungsfluss zu steuern, indem Sie eine erfolgreiche Ausführung oder einen Fehler behandeln.
Promise kann in drei Zuständen liegen: warten (pending), erfüllt (fulfilled) oder abgelehnt (rejected). Wenn sich die Promis im ausstehenden Zustand befinden, führt sie einen asynchronen Vorgang aus. Bei Erfolg wechselt die Promis in den Status abgeschlossen und ruft eine Rückruffunktion auf, um das Ergebnis zu verarbeiten. Im Falle eines Fehlers wechselt er in den Status abgelehnt und ruft die Rückruffunktion auf, um den Fehler zu behandeln.
Das Erstellen einer bereits ausgeführten Promis kann nützlich sein, wenn Sie sofort ein Ergebnis erhalten möchten, ohne darauf zu warten, dass ein asynchroner Vorgang ausgeführt wird. Dazu wird die Promise-Methode verwendet.resolve(value) . Es erstellt eine neue Promis, die sofort mit dem angegebenen Wert in den Status abgeschlossen wechselt.
Die Verwendung einer bereits ausgeführten Promis vereinfacht den Code und spart Zeit, insbesondere in Fällen, in denen das Ergebnis im Voraus bekannt ist oder bereits heruntergeladen und im Speicher gespeichert wurde. Außerdem kann eine bereits ausgeführte Promis verwendet werden, um das Problem der Race conditions zu lösen und asynchrone Vorgänge zu synchronisieren, wenn eine Operation vom Ergebnis einer anderen abhängt.
Erstellen eines promise
Um ein promise zu erstellen, verwenden Sie den Promise-Konstruktor, der eine Executor-Funktion als Argument verwendet. Die ausführende Funktion akzeptiert zwei Argumente: die Funktion resolve und die Funktion reject. Die Resolve-Funktion wird aufgerufen, wenn der Vorgang erfolgreich abgeschlossen wurde, und gibt das Ergebnis zurück. Die reject-Funktion wird aufgerufen, wenn der Vorgang fehlschlägt und ein Fehler zurückgegeben wird.
Beispiel zum Erstellen eines Promises:
const myPromise = new Promise((resolve, reject) => // asynchrone Operation
setTimeout(() => resolve('Erfolg!');
>, 2000);
>);
In diesem Beispiel wird eine myPromise-Promis erstellt, die einen asynchronen Vorgang mithilfe von setTimeout ausführt. Nach 2 Sekunden (2000 ms) ruft Promis die Funktion resolve auf, die den Wert "Erfolg!".
Sie können die then- und catch-Methoden verwenden, um eine Promis zu verwenden und deren Ergebnis abzurufen:
myPromise.then(result => console.log(result);
>).catch(error => console.error(error);
>);
Die then-Methode wird nach erfolgreicher Promis aufgerufen und akzeptiert eine Funktion, die mit dem übergebenen resolve-Wert aufgerufen wird. Die catch-Methode wird aufgerufen, wenn ein Fehler auftritt, und akzeptiert eine Funktion, die mit dem übergebenen reject-Wert aufgerufen wird.
Wie man ein promise durchführt
Um ein promise auszuführen, müssen Sie eine Funktion aufrufen, die dieses Objekt zurückgibt. Wenn die Promis erfolgreich ausgeführt werden, wird sie in den Status "Abgeschlossen" versetzt und gibt das Ergebnis des Vorgangs zurück. Im Falle eines Fehlers wechselt die Promis in den Status "abgelehnt" und gibt eine entsprechende Meldung zurück.
Wenn Sie ein Versprechen erstellen möchten, das sofort abgeschlossen wird, können Sie die Promise-Methode verwenden.resolve() oder Promise.reject() . Diese Methoden erstellen und geben bereits ausgeführte Promis mit den als Argument übergebenen Daten zurück.
Ein Beispiel für die Verwendung der Promise-Methode.resolve() :
Promise.resolve('Успех!').then(function(value) );
Ein Beispiel für die Verwendung der Promise-Methode.reject() :
Promise.reject(new Error('Ошибка!')).catch(function(error) );
Erstellen und Ausführen von Promises mit Promise-Methoden.resolve() und Promise.reject() bietet eine bequeme Möglichkeit, mit asynchronem Code zu arbeiten.