Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Experiment: Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.

Promise.resolve()

BaselineWidely available

DiePromise.resolve() statische Methode "löst" einen gegebenen Wert in einPromise auf. Wenn der Wert ein Promise ist, wird dieses Promise zurückgegeben; wenn der Wert einthenable ist, wirdPromise.resolve() diethen()-Methode mit zwei vorbereiteten Rückrufmethoden aufrufen; andernfalls wird das zurückgegebene Promise mit dem Wert erfüllt.

Diese Funktion reduziert verschachtelte Ebenen von promise-ähnlichen Objekten (z. B. ein Promise, das zu einem Promise erfüllt wird, das zu etwas erfüllt wird) auf eine einzelne Ebene — ein Promise, das zu einem nicht-thenable Wert erfüllt wird.

Probieren Sie es aus

const promise1 = Promise.resolve(123);promise1.then((value) => {  console.log(value);  // Expected output: 123});

Syntax

js
Promise.resolve(value)

Parameter

value

Argument, das von diesemPromise aufgelöst werden soll. Kann auch einPromise oder ein thenable sein, das aufgelöst werden soll.

Rückgabewert

EinPromise, das mit dem gegebenen Wert aufgelöst wird oder das Promise, das als Wert übergeben wurde, wenn der Wert ein Promise-Objekt war. Ein aufgelöstes Promise kann in jedem der Zustände sein — erfüllt, abgelehnt oder ausstehend. Zum Beispiel wird das Auflösen eines abgelehnten Promises immer noch zu einem abgelehnten Promise führen.

Beschreibung

Promise.resolve()löst ein Promise auf, was nicht dasselbe ist wie das Erfüllen oder Ablehnen des Promises. Weitere Definitionen der Terminologie finden Sie in derBeschreibung von Promise. Kurz gesagt gibtPromise.resolve() ein Promise zurück, dessen endgültiger Zustand von einem anderen Promise, thenable Objekt oder einem anderen Wert abhängt.

Hinweis:Wenn die Auswertung desvalue-Ausdrucks möglicherweise synchron einen Fehler auslöst, wird dieser Fehler vonPromise.resolve() nicht abgefangen und in ein abgelehntes Promise eingebettet. Ziehen Sie in diesem Fall in Betracht,Promise.try(() => value) zu verwenden.

Promise.resolve() ist generisch und unterstützt die Unterklassenbildung, was bedeutet, dass es auf Unterklassen vonPromise aufgerufen werden kann und das Ergebnis ein Promise des Unterklassentyps sein wird. Hierfür muss der Konstruktor der Unterklasse die gleiche Signatur wie derPromise()-Konstruktor implementieren — das Akzeptieren einer einzelnenexecutor-Funktion, die mit denresolve- undreject-Rückrufen als Parameter aufgerufen werden kann.

Promise.resolve() behandelt nativePromise-Instanzen speziell. Wennvalue zuPromise oder einer Unterklasse gehört undvalue.constructor === Promise, wirdvalue direkt vonPromise.resolve() zurückgegeben, ohne eine neuePromise-Instanz zu erstellen. Andernfalls istPromise.resolve() im Wesentlichen eine Kurzform fürnew Promise((resolve) => resolve(value)).

Der Großteil der Auflösungslogik wird tatsächlich von derderresolve-Funktion implementiert, die vomPromise()-Konstruktor übergeben wird. Zusammengefasst:

  • Wenn ein nicht-thenable-Wert übergeben wird, ist das zurückgegebene Promise bereits mit diesem Wert erfüllt.
  • Wenn ein thenable übergeben wird, übernimmt das zurückgegebene Promise den Zustand dieses thenable, indem diethen-Methode aufgerufen und ein Paar von Auflösungsfunktionen als Argumente übergeben werden. (Da jedoch native Promises direkt überPromise.resolve() ohne die Erstellung eines Wrappers durchlaufen werden, wird diethen-Methode nicht für native Promises aufgerufen.) Wenn dieresolve-Funktion ein weiteres thenable-Objekt erhält, wird es erneut aufgelöst, sodass der letztendliche Erfüllungswert des Promises niemals thenable sein wird.

Beispiele

Verwenden der statischen Methode Promise.resolve

js
Promise.resolve("Success").then(  (value) => {    console.log(value); // "Success"  },  (reason) => {    // not called  },);

Auflösen eines Arrays

js
const p = Promise.resolve([1, 2, 3]);p.then((v) => {  console.log(v[0]); // 1});

Auflösen eines anderen Promises

Promise.resolve() verwendet bestehendePromise-Instanzen wieder. Wenn es ein natives Promise auflöst, wird die gleiche Promise-Instanz zurückgegeben, ohne einen Wrapper zu erstellen.

js
const original = Promise.resolve(33);const cast = Promise.resolve(original);cast.then((value) => {  console.log(`value: ${value}`);});console.log(`original === cast ? ${original === cast}`);// Logs, in order:// original === cast ? true// value: 33

Die umgekehrte Reihenfolge der Protokolle liegt daran, dass diethen-Handler asynchron aufgerufen werden. Weitere Informationen finden Sie in derthen()-Referenz.

Auflösen von thenables und das Auslösen von Fehlern

js
// Resolving a thenable objectconst p1 = Promise.resolve({  then(onFulfill, onReject) {    onFulfill("fulfilled!");  },});console.log(p1 instanceof Promise); // true, object casted to a Promisep1.then(  (v) => {    console.log(v); // "fulfilled!"  },  (e) => {    // not called  },);// Thenable throws// Promise rejectsconst p2 = Promise.resolve({  then() {    throw new TypeError("Throwing");  },});p2.then(  (v) => {    // not called  },  (e) => {    console.error(e); // TypeError: Throwing  },);// Thenable throws after callback// Promise resolvesconst p3 = Promise.resolve({  then(onFulfilled) {    onFulfilled("Resolving");    throw new TypeError("Throwing");  },});p3.then(  (v) => {    console.log(v); // "Resolving"  },  (e) => {    // not called  },);

Verschachtelte thenables werden "tief abgeflacht" zu einem einzigen Promise.

js
const thenable = {  then(onFulfilled, onRejected) {    onFulfilled({      // The thenable is fulfilled with another thenable      then(onFulfilled, onRejected) {        onFulfilled(42);      },    });  },};Promise.resolve(thenable).then((v) => {  console.log(v); // 42});

Warnung:Rufen SiePromise.resolve() nicht auf einem thenable auf, das sich selbst auflöst. Dies führt zu einer Endlosschleife, da versucht wird, ein unendlich verschachteltes Promise abzuflachen.

js
const thenable = {  then(onFulfilled, onRejected) {    onFulfilled(thenable);  },};Promise.resolve(thenable); // Will lead to infinite recursion.

Aufrufen von resolve() bei einem Nicht-Promise Konstruktor

Promise.resolve() ist eine generische Methode. Sie kann bei jedem Konstruktor aufgerufen werden, der die gleiche Signatur wie derPromise()-Konstruktor implementiert. Zum Beispiel können wir sie bei einem Konstruktor aufrufen, derconsole.log alsresolve übergibt:

js
class NotPromise {  constructor(executor) {    // The "resolve" and "reject" functions behave nothing like the    // native promise's, but Promise.resolve() calls them in the same way.    executor(      (value) => console.log("Resolved", value),      (reason) => console.log("Rejected", reason),    );  }}Promise.resolve.call(NotPromise, "foo"); // Logs "Resolved foo"

Die Fähigkeit, verschachtelte thenables abzuflachen, wird von derresolve-Funktion desPromise()-Konstruktors implementiert. Wenn Sie sie bei einem anderen Konstruktor aufrufen, werden verschachtelte thenables möglicherweise nicht abgeflacht, je nachdem, wie dieser Konstruktor seineresolve-Funktion implementiert.

js
const thenable = {  then(onFulfilled, onRejected) {    onFulfilled({      // The thenable is fulfilled with another thenable      then(onFulfilled, onRejected) {        onFulfilled(42);      },    });  },};Promise.resolve.call(NotPromise, thenable); // Logs "Resolved { then: [Function: then] }"

Spezifikationen

Specification
ECMAScript® 2026 Language Specification
# sec-promise.resolve

Browser-Kompatibilität

Siehe auch

MDN-Feedback-Box

Diese Seite wurde automatisch aus dem Englischen übersetzt.


[8]ページ先頭

©2009-2025 Movatter.jp