2016-08-03 96 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中出貨,並且在下一個主要版本出現之前不會在最新版本中出現。