2016-08-03 126 views
0

我试图继承标准承诺对象,但我想then返回一个标准承诺对象,而不是我的子类。NodeJS承诺和Symbol.species使用

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工作?任何想法如何解决这个问题?

回答

3

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

> 'species' in Symbol 
false 

它目前是在V6.x中的标志(--harmony-species--es-staging)后面因此,它可以工作如果你开始节点是这样的:

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

我会注意到你的具体的例子做工作节点v6.3.1与标志。它还没有在Node中出货,并且在下一个主要版本出现之前不会在最新版本中出现。