Promise[Symbol.species]
Базовый уровень Широко доступен
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.
Статический свойство доступа Promise[Symbol.species] возвращает конструктор, используемый для создания результатов из методов Promise.
Предупреждение: Существование [Symbol.species] позволяет выполнять произвольный код и может создавать уязвимости безопасности. Оно также значительно усложняет некоторые оптимизации. Разработчики движков исследуют возможность удаления этой функции. По возможности избегайте ее использования.
Синтаксис
Promise[Symbol.species]
Возвращаемое значение
Значение конструктора (this), для которого был вызван get [Symbol.species]. Возвращаемое значение используется для создания результатов из методов цепочки Promise, которые создают новые Promise.
Описание
Свойство доступа [Symbol.species] возвращает конструктор по умолчанию для объектов Promise. Конструкторы подклассов могут переопределить его, чтобы изменить назначение конструктора. Реализация по умолчанию в основном выглядит так:
// Hypothetical underlying implementation for illustration
class Promise {
static get [Symbol.species]() {
return this;
}
}
Благодаря этой полиморфной реализации, [Symbol.species] производных подклассов также будут по умолчанию возвращать сам конструктор.
class SubPromise extends Promise {}
SubPromise[Symbol.species] === SubPromise; // true
Методы цепочки Promise — then(), catch() и finally() — возвращают новые объекты Promise. Они получают конструктор для создания нового Promise через this.constructor[Symbol.species]. Если this.constructor равен undefined, или если this.constructor[Symbol.species] равен undefined или null, используется конструктор по умолчанию Promise(). В противном случае для создания нового объекта Promise используется конструктор, возвращаемый this.constructor[Symbol.species].
Примеры
Species в обычных объектах
Свойство Symbol.species возвращает функцию конструктора по умолчанию, которая является конструктором Promise для Promise.
Promise[Symbol.species]; // [Function: Promise]
Species в производных объектах
В экземпляре пользовательского подкласса Promise, такого как MyPromise, species MyPromise является конструктором MyPromise. Однако вы можете захотеть переопределить это, чтобы возвращать объекты родительского Promise в методах вашего производного класса.
class MyPromise extends Promise {
// Override MyPromise species to the parent Promise constructor
static get [Symbol.species]() {
return Promise;
}
}
По умолчанию методы Promise будут возвращать Promise типа подкласса.
class MyPromise extends Promise {
someValue = 1;
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // 1
Переопределяя [Symbol.species], методы Promise будут возвращать базовый тип Promise.
class MyPromise extends Promise {
someValue = 1;
static get [Symbol.species]() {
return Promise;
}
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // undefined
Спецификации
Совместимость с браузерами
| Настольные | Мобильные | Сервер | |||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on iOS | Samsung Internet | WebView Android | WebView on iOS | Bun | Deno | Node.js | |
@@species |
51 |
79 |
48 |
38 |
10 |
51 |
48 |
41 |
10 |
5.0 |
51 |
10 |
1.0.0 |
1.0 |
6.5.0 |
См. также
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Symbol.species