Spec-Zone.ru › JavaScript

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

Спецификации

Спецификация
ECMAScript® 2027 Language Specification
# sec-get-promise-%symbol.species%

Совместимость с браузерами

Настольные Мобильные Сервер
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

См. также

  • Promise
  • Symbol.species

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API