NodeJS Promise和Symbol.species用法

时间:2016-08-03 12:33:39

标签: javascript node.js es6-promise

我试图继承标准的promise对象,但我希望then返回一个标准的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());

我认为铬的效果很好:

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

但似乎没有使用NodeJS

node ~/Documents/test4.js 
CustomPromise

这是一个NodeJS错误吗?任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

在撰写本文时,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中发布,并且在下一个主要版本发布之前不会出现在最新版本中。