Я пытаюсь расширить Promise:
class PersistedPromise extends Promise { }
Затем вызовите статический resolve
в производном классе, чтобы напрямую создать разрешенное обещание:
PersistedPromise.resolve(1)
В traceur это дает:
ModuleEvaluationError: #<PersistedPromise> is not a promise
at new PersistedPromise (~rtm/gen/promise.js:6:57)
at Function.resolve (native)
В Babel (запускается как 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)
...
Я зависел от этого:
Все статические методы Promise поддерживают подклассы: они создают новые экземпляры через своего получателя (подумайте: new this(...)) и также получают через него доступ к другим статическим методам (this.resolve(...) по сравнению с Promise.resolve(.. .)).
из http://www.2ality.com/2014/10/es6-promises-api.html а>.
Похоже, что узел проверяет this
при таких вызовах, как Promise.resolve.call(this, val)
, на предмет того, является ли он Promise
, а не (правильно?) Promise
или его производным классом (v0.12.0).
Вышеупомянутое больше не работает, или не попало в спецификацию, или просто не реализовано traceur и/или узлом?
TypeError: #<ExtendedPromise> is not a promise
, когда вызываю конструкторnew ExtendedPromise(res => {})
. Есть ли какой-нибудь другой трюк для этого? - person sighrobot   schedule 02.03.2016