繁体   English   中英

扩展ES6中的承诺

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM