2016-12-17 27 views
0

この質問は標準的な質問/回答を意図しています。 What is a canonical question/answer, and what is their purpose?を参照してください。決定的な答えはありません。以前に尋ねられ、質問された質問の代わりに質問を投稿しています。質問に既に回答している場合は、現在の質問を削除します。 point-2状態Promiseオブジェクトのthenメソッドを使用せずに[PromiseValue]をPromiseオブジェクトから取得することはできませんか?

約束


Promises/A+仕様は、非同期 操作の最終的な結果を示します。約束と対話する主な方法は、 約束の最終的な値または約束を にすることができない理由のいずれかを受け取れるようにコールバックを登録する、のthenメソッドです。 comment

この質問にreturn value from Promise OPは右

を要求するが、それは約束のうちの値をとらない、または 私は、これはブラウザから不可能であることを受け入れる必要がありますか?

"不可能" であるものを述べることを躊躇

を対応するためにどの。仕様、PromisesYou're Missing the Point of Promisesへのリンクを提供することによって、続い


それはPromiseオブジェクトのthenメソッドを使用せずに、console.log(promiseObject)でオブジェクトのプロパティ値を表示する以外のPromiseオブジェクトから[[PromiseValue]]を取得することは不可能ですか?

+0

[[PromiseValue]]とは何ですか? [[PromiseResult]]を意味しますか? [Promiseインスタンスのプロパティ](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

関連する問題