Я пытаюсь продлить обещание:Продление Promises в ES6
class PersistedPromise extends Promise { }
Затем вызовите статический resolve
на производный класс непосредственно создать разрешенное обещание:
PersistedPromise.resolve(1)
В трейсер, это дает:
ModuleEvaluationError: #<PersistedPromise> is not a promise
at new PersistedPromise (~rtm/gen/promise.js:6:57)
at Function.resolve (native)
в Вавилонской (запуск, как babel-node --experimental promise.js
) это приводит к:
Promise.apply(this, arguments);
^
TypeError: [object Object] is not a promise
at new PersistedPromise (~rtm/gen/promise.js:1:23)
at Function.resolve (native)
...
Я был в зависимости от этого:
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(...)).
от http://www.2ality.com/2014/10/es6-promises-api.html.
Похоже, что узел проверяет this
на вызовы, такие как Promise.resolve.call(this, val)
за то, что Promise
, а не (правильно?) Promise
или производного класса его (v0.12.0).
Является ли вышеизложенное более недействующим или не входит в спецификацию или просто не реализовано трассировщиком и/или узлом?
Это должно работать imo. Я предполагаю, что ни один из transpilers не поддерживает это. – Bergi
** New Viewers Note ** - пример кода в этом вопросе теперь должен компилироваться и работать в Babel. –
@BenjaminGruenbaum Я использую предустановку Babel + ES2015, и я все еще получаю 'TypeError: # не является обещанием', когда я вызываю конструктор 'new ExtendedPromise (res => {})'. Есть ли еще трюк? –
sighrobot