Promise[Symbol.species]
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
Die statische Zugriffseigenschaft Promise[Symbol.species]
gibt den Konstruktor zurück, der verwendet wird, um Rückgabewerte aus Promise-Methoden zu konstruieren.
Warnung:
Die Existenz von [Symbol.species]
erlaubt die Ausführung von beliebigem Code und kann Sicherheitslücken erzeugen. Außerdem erschwert sie bestimmte Optimierungen erheblich. Entwickler von Engines untersuchen, ob dieses Feature entfernt werden sollte. Vermeiden Sie es, sich darauf zu verlassen, wenn möglich.
Syntax
Promise[Symbol.species]
Rückgabewert
Der Wert des Konstruktors (this
), auf dem get [Symbol.species]
aufgerufen wurde. Der Rückgabewert wird verwendet, um Rückgabewerte aus Promise-Verkettungsmethoden zu konstruieren, die neue Promises erstellen.
Beschreibung
Die Eigenschaft [Symbol.species]
gibt den Standardkonstruktor für Promise
-Objekte zurück. Unterklassenkonstruktoren können sie überschreiben, um die Konstruktorzuweisung zu ändern. Die Standardimplementierung ist im Grunde:
// Hypothetical underlying implementation for illustration
class Promise {
static get [Symbol.species]() {
return this;
}
}
Aufgrund dieser polymorphen Implementierung würde [Symbol.species]
von abgeleiteten Unterklassen standardmäßig auch den Konstruktor selbst zurückgeben.
class SubPromise extends Promise {}
SubPromise[Symbol.species] === SubPromise; // true
Promise-Verkettungsmethoden — then()
, catch()
und finally()
— geben neue Promise-Objekte zurück. Sie erhalten den Konstruktor, um das neue Promise zu konstruieren, durch this.constructor[Symbol.species]
. Wenn this.constructor
undefined
ist, oder wenn this.constructor[Symbol.species]
undefined
oder null
ist, wird der Standard-Promise()
-Konstruktor verwendet. Andernfalls wird der vom this.constructor[Symbol.species]
zurückgegebene Konstruktor verwendet, um das neue Promise-Objekt zu konstruieren.
Beispiele
Species in gewöhnlichen Objekten
Die Symbol.species
-Eigenschaft gibt die Standard-Konstruktorfunktion zurück, die für Promise
der Promise
-Konstruktor ist.
Promise[Symbol.species]; // [Function: Promise]
Species in abgeleiteten Objekten
In einer Instanz einer benutzerdefinierten Promise
-Unterklasse, wie MyPromise
, ist die MyPromise
-Species der MyPromise
-Konstruktor. Sie könnten dies jedoch überschreiben wollen, um in Ihren abgeleiteten Klassenmethoden übergeordnete Promise
-Objekte zurückzugeben.
class MyPromise extends Promise {
// Override MyPromise species to the parent Promise constructor
static get [Symbol.species]() {
return Promise;
}
}
Standardmäßig würden Promise-Methoden Promises mit dem Typ der Unterklasse zurückgeben.
class MyPromise extends Promise {
someValue = 1;
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // 1
Durch das Überschreiben von [Symbol.species]
werden die Promise-Methoden den Basistyp Promise
zurückgeben.
class MyPromise extends Promise {
someValue = 1;
static get [Symbol.species]() {
return Promise;
}
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // undefined
Spezifikationen
Specification |
---|
ECMAScript® 2026 Language Specification # sec-get-promise-%symbol.species% |