[英]Extending Promises in ES6
我想扩展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 。
似乎节点在Promise.resolve.call(this, val)
调用上检查this
是否为Promise
,而不是(正确?) Promise
或其派生类 (v0.12.0)。
以上是不再有效,或者没有制定规范,或者只是没有由traceur和/或节点实现?
以上是不再有效,或者没有制定规范,或者只是没有由traceur和/或节点实现?
ES6承诺在spec支持子类中。 也就是说,您最终将能够以您刚才的方式继承承诺。 这是设计的。
也就是说,目前没有一个浏览器在这方面正确遵循该规范 - 据我所知只有ES6承诺垫片,Babel(core-js)和RSVP遵循ES6语义正确地进行子类化。 浏览器的支持最终会到来,但它还没有。 抓紧。
以下是当前支持的实现列表 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.