⊗jsSpPrmFC 171 of 294 menu

Erstellen von erfüllten Promises in JavaScript

Manchmal kann es notwendig sein, ein bereits erfülltes Promise zu erstellen. Dafür gibt es zwei Methoden: Die Methode Promise.resolve erstellt ein erfolgreich erfülltes Promise, Promise.reject erstellt ein abgelehntes Promise. Als Parameter erhalten diese Methoden das, was zum Ergebnis oder Fehler des Promises wird.

Wann kann ein bereits erfülltes Promise nützlich sein? Schauen wir uns ein Beispiel an. Angenommen, wir haben eine Funktion, die eine Zahl als Parameter entgegennimmt, diese asynchron verarbeitet und ein Promise mit dem Ergebnis zurückgibt:

function func(num) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); }

Wir werden unsere Funktion wie folgt verwenden:

func(5).then(function(res) { console.log(res); // gibt 25 aus });

Nehmen wir nun an, wir haben entschieden, dass wir unseren asynchronen Vorgang nur ausführen wollen, wenn die übergebene Zahl größer als Null ist. Andernfalls soll das Ergebnis der Funktion Null sein:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return 0; // Null-Ergebnis } }

Jetzt gibt die Funktion jedoch entweder ein Promise oder eine Zahl zurück. Dadurch können wir nicht mehr die Methode then auf das Ergebnis der Funktion anwenden, da wir im Fall der Rückgabe einer Zahl einen Fehler erhalten:

func(0).then(function(res) { // Fehler, wir wenden die then-Methode auf Null an });

Das Problem können wir mit Promise.resolve beheben:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else { return Promise.resolve(0); // geben ein Promise zurück, keine Zahl } }

Nehmen wir nun an, wir haben entschieden, dass wir für eine übergebene Null, Null zurückgeben sollen, und für Zahlen kleiner Null - eine Ausnahme. Dabei hilft uns die Methode Promise.reject:

function func(num) { if (num > 0) { return new Promise(function(resolve) { setTimeout(function() { resolve(num * num); }, 3000); }); } else if (num === 0) { return Promise.resolve(0); } else { return Promise.reject('incorrect number'); // geben ein abgelehntes Promise zurück } }
Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen