簡體   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