Baseline Widely available
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.
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.
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.
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 Browser-Kompatibilität Siehe auch
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4