Promise[Symbol.species]
Die statische Zugriffsoroperty 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]
ermöglicht die Ausführung von beliebigem Code und kann Sicherheitslücken schaffen. Sie erschwert auch bestimmte Optimierungen. Implementierer von Engines untersuchen derzeit, 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 von Promise-Verkettungsmethoden zu konstruieren, die neue Promises erstellen.
Beschreibung
Die [Symbol.species]
Accessor-Property gibt den Standardkonstruktor für Promise
-Objekte zurück. Unterklassenspezifische Konstruktoren können diese überschreiben, um die Konstruktorzuweisung zu ändern. Die Standardimplementierung ist im Wesentlichen:
// 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 über this.constructor[Symbol.species]
zu konstruieren. Wenn this.constructor
undefined
ist oder this.constructor[Symbol.species]
undefined
oder null
ist, wird der Standardkonstruktor Promise()
verwendet. Andernfalls wird der Konstruktor verwendet, der von this.constructor[Symbol.species]
zurückgegeben wird, um das neue Promise-Objekt zu konstruieren.
Beispiele
Species in gewöhnlichen Objekten
Die Symbol.species
-Property gibt die Standardkonstruktorfunktion zurück, die der Promise
-Konstruktor für Promise
ist.
Promise[Symbol.species]; // [Function: Promise]
Species in abgeleiteten Objekten
In einer Instanz einer benutzerdefinierten Promise
-Unterklasse, wie MyPromise
, ist die MyPromise
-Spezies der MyPromise
-Konstruktor. Sie könnten diesen jedoch überschreiben wollen, um in Ihren abgeleiteten Klassenmethoden Eltern-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]
geben die Promise-Methoden den Basistyp Promise
zurück.
class MyPromise extends Promise {
someValue = 1;
static get [Symbol.species]() {
return Promise;
}
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // undefined
Spezifikationen
Specification |
---|
ECMAScript Language Specification # sec-get-promise-%symbol.species% |
Browser-Kompatibilität
BCD tables only load in the browser