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