NodeJS Promise 和 Symbol.species 用法

NodeJS Promise and Symbol.species usage

我试图子类化标准 promise 对象,但我想要 then 到 return 标准 promise 对象而不是我的子类。

class CustomPromise extends Promise
{
    constructor(fn)
    {
        super(fn);
    }

    static get [Symbol.species]()
    {
        console.log("get Symbol.species");
        return Promise;
    }

    toString()
    {
        return "CustomPromise";
    }
}

var p = new CustomPromise((resolve) => resolve(5)).then(v => console.log(v) );
console.log(p.toString());

我看到 chrome 可以正常工作:

test4.js:12 get Symbol.species
test4.js:25 [object Promise]

但似乎不适用于 NodeJS

node ~/Documents/test4.js 
CustomPromise

这是 NodeJS 的错误吗?有什么想法可以解决这个问题吗?

在撰写本文时,Node 尚不支持 Symbol.species

> 'species' in Symbol
false

它目前位于 v6.x 中的标志(--harmony-species--es-staging)后面。因此,如果您像这样启动 Node,它 可能 工作:

$ node --es-staging
> 'species' in Symbol
true

我会注意到您的特定示例在具有该标志的 Node v6.3.1 中确实有效。它只是尚未在 Node 中发布,并且在下一个主要版本升级之前不太可能出现在最新版本中。