In an instance of a custom Promise subclass, such as MyPromise, the MyPromise species is the MyPromise constructor. However, you might want to override this, in order to return parent Promise objects in your derived class methods.
class MyPromise extends Promise {
// Override MyPromise species to the parent Promise constructor
static get [Symbol.species]() {
return Promise;
}
}
By default, promise methods would return promises with the type of the subclass.
class MyPromise extends Promise {
someValue = 1;
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // 1
By overriding [Symbol.species], the promise methods will return the base Promise type.
class MyPromise extends Promise {
someValue = 1;
static get [Symbol.species]() {
return Promise;
}
}
console.log(MyPromise.resolve(1).then(() => {}).someValue); // undefined