我正在尝试扩展 Promise:
class PersistedPromise extends Promise { }
然后在派生类上调用静态resolve
,直接创建一个已解决的promise:
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。
看起来node检查调用中的this
,例如Promise.resolve.call(this, val)
,以确保它是一个Promise
,而不是(正确的?)Promise
或其派生类(v0.12.0)。
以上内容已经失效了吗,还是没有进入规范,或者只是没有被traceur和/或node实现?
new ExtendedPromise(res => {})
时仍然出现TypeError:#<ExtendedPromise>不是promise
。还有其他技巧吗? - sighrobot