我正在尝试扩展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。
节点似乎检查this
等Promise.resolve.call(this, val)
之类的呼叫是Promise
,而不是(正确?)Promise
或派生类(v0.12.0)。
以上内容是否已不再有效,或未进入规范,或者是否仅由traceur和/或节点实现?
答案 0 :(得分:20)
以上内容是否已不再有效,或未进入规范,或者是否仅由traceur和/或节点实现?
ES6承诺在spec支持子类中。也就是说,您最终将能够以您刚才的方式继承承诺。这是设计的。
也就是说,目前没有一个浏览器在这方面正确遵循该规范 - 据我所知,只有ES6承诺垫片,Babel(core-js)和RSVP遵循ES6语义正确地进行子类化。浏览器的支持最终会到来,但还没有。紧紧抓住。