Ich versuche, Versprechen zu verlängern:Erweiterung Promises in ES6
class PersistedPromise extends Promise { }
Dann rufen Sie die statische resolve
auf der abgeleiteten Klasse, um direkt ein aufgelöstes Versprechen zu erstellen:
PersistedPromise.resolve(1)
In traceur, ergibt dies:
ModuleEvaluationError: #<PersistedPromise> is not a promise
at new PersistedPromise (~rtm/gen/promise.js:6:57)
at Function.resolve (native)
in Babel (laufen als babel-node --experimental promise.js
) führt dies zu:
Promise.apply(this, arguments);
^
TypeError: [object Object] is not a promise
at new PersistedPromise (~rtm/gen/promise.js:1:23)
at Function.resolve (native)
...
Ich war abhängig davon:
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(...)).
von http://www.2ality.com/2014/10/es6-promises-api.html.
Es scheint, dass die Knoten this
auf Anrufe wie für eine Promise.resolve.call(this, val)
Promise
sein, anstatt (richtig?) Promise
oder einer abgeleiteten Klasse davon (v0.12.0) überprüft.
Ist das Obige nicht mehr funktionstüchtig, oder hat es nicht in die Spezifikation aufgenommen, oder einfach nicht von Traceur und/oder Knoten implementiert?
Das sollte imo arbeiten. Meine Vermutung ist, dass keiner der Transpiler dies unterstützt. – Bergi
** New Viewers Note ** - das Codebeispiel in dieser Frage sollte jetzt in Babel kompilieren und funktionieren. –
@BenjaminGruenbaum Ich benutze Babel + ES2015 Preset und ich bekomme immer noch 'TypeError: # ist kein Versprechen, wenn ich den Konstruktor' new ExtendedPromise (res => {}) 'aufrufen. Gibt es einen anderen Trick? –
sighrobot