Próbuję przedłużyć obietnicyRozszerzanie Promises w ES6
class PersistedPromise extends Promise { }
Następnie zadzwonić statycznej resolve
na klasie pochodnej bezpośrednio stworzyć rozwiązane obietnicę:
PersistedPromise.resolve(1)
W Traceur, Dało to:
ModuleEvaluationError: #<PersistedPromise> is not a promise
at new PersistedPromise (~rtm/gen/promise.js:6:57)
at Function.resolve (native)
w Babel (uruchom jako babel-node --experimental promise.js
) skutkuje:
Promise.apply(this, arguments);
^
TypeError: [object Object] is not a promise
at new PersistedPromise (~rtm/gen/promise.js:1:23)
at Function.resolve (native)
...
byłem w zależności od tego:
All static methods of Promise support subclassing: they create new instances via their receiver (think: new this(...)) and also access other static methods via it (this.resolve(...) versus Promise.resolve(...)).
z http://www.2ality.com/2014/10/es6-promises-api.html.
Wydaje się, że węzeł sprawdza this
na połączeniach, takich jak Promise.resolve.call(this, val)
do bycia Promise
, zamiast (słusznie?) Promise
lub jego (v0.12.0) klasy pochodnej.
Czy powyższe elementy nie działają lub nie zostały wprowadzone do specyfikacji lub po prostu nie zostały zaimplementowane przez traceur i/lub węzeł?
To powinno zadziałać. Domyślam się, że żaden z transpilerów tego nie obsługuje. – Bergi
** New Viewers Note ** - przykład kodu w tym pytaniu powinien się teraz skompilować i pracować w Babel. –
@BenjaminGruenbaum Używam ustawienia Babel + ES2015 i nadal otrzymuję 'TypeError: # nie jest obietnicą' kiedy wywołuję konstruktora' new ExtendedPromise (res => {}) '. Czy jest jakaś inna sztuczka? –
sighrobot