2016-12-17 19 views
0

此問題旨在成爲規範問題/答案;請參閱What is a canonical question/answer, and what is their purpose?。這裏沒有明確的答案。代替以前在這裏發佈問題的問題。如果問題已經被回答,將刪除當前的問題。如果不使用Promise對象的then方法,是否無法從Promise對象獲取[[PromiseValue]]?


Promises/A+的規範在​​point-2狀態

承諾表示異步 操作的最終結果。與承諾互動的主要方式是通過 其then方法,該方法記錄回調以接收承諾的最終價值或履行承諾的原因,因爲承諾的履行不會達到 。

comment在這個問題return value from Promise OP詢問

權,但不稱取數值超出承諾的,還是應該 我接受,這是不可能的從瀏覽器?

到迴應

猶豫說明什麼是 「不可能的」。

然後提供指向的鏈接,PromisesYou're Missing the Point of Promises


是不可能得到[[PromiseValue]]Promise對象,比console.log(promiseObject)查看對象的屬性值等,不使用Promise對象的then方法?

+0

什麼是[[PromiseValue]]?你的意思是[[PromiseResult]]?參見[Promise Instances的屬性](http://www.ecma-international.org/ecma-262/7.0/#sec-properties-of-promise-instances) – Oriol

+0

@Oriol不確定內部屬性;使用術語「財產」,因爲在這裏缺乏對「財產」的準確描述;在您嘗試使用的瀏覽器中以[[PromiseResult]]實現。在鉻52,該屬性被實現爲[[PromiseValue]]。例如,'console.log(Promise.resolve(「abc」))'。 – guest271314

+1

沒有什麼可以說承諾如何存儲PromiseResult,我相信,這取決於實踐。它可以作爲外部代理人可以直接訪問的公開訪問的屬性進行存儲(假設他們有其他方式知道該承諾已經實現)。但是,由於除了'.then()'之外並沒有標準的方式來知道什麼時候該承諾被履行,並且在那裏提供了結果,所以似乎沒有任何意圖試圖以任何其他方式訪問該值。 – jfriend00

回答

1

在ES7中不可能。一個承諾的值被存儲在[[PromiseResult]] internal slot

與該承諾已經滿足或拒絕的值,如果 任何。只有在[[PromiseState]]不是"pending"時纔有意義。

即槽在PerformPromiseThen抽象操作,其僅通過Promise.prototype.then暴露只讀。

+0

剛剛發生,如果'console.log(Promise.resolve(「a value」))'將'Promise'的內部槽打印到'console',是否可以檢索到'console.log()'調用的結果如果只是作爲文本? – guest271314

+0

@ guest271314也許如果你有特權代碼像擴展名,否則我不這麼認爲。 – Oriol