ホームページ  >  に質問  >  本文

Promise の値を取得するにはどうすればよいですか?

<p>私は Angular ドキュメントで <code>$q</code> の例を調べていましたが、これは Promise 全般に使えるのではないかと思いました。以下の例は、コメントも含めてドキュメントから直接コピーしたものです。 <pre class="brush:php;toolbar:false;">promiseB = PromiseA.then(function(result) { 結果 1 を返します。 }); //promiseA が解決されると、promiseB はすぐに解決され、その値は、promiseA に 1</pre> を加えた結果になります。 <p>これがどのように機能するのかわかりません。最初の <code>.then()</code> の結果に対して <code>.then()</code> を呼び出して、それらを連鎖させることができれば、それができることはわかっています。 ;code>promiseB</code> は、タイプ <code>Object</code> の Promise オブジェクトです。これは <code>Number</code> ではありません。では、「その値は、promiseA に 1 を加えた結果になります」とは何を意味するのでしょうか? </p> <p><code>promiseB.value</code> のようにアクセスする必要がありますか?成功コールバックが Promise を返し、「結果 1」を返すにはどうすればよいでしょうか?何かが足りない。 </p>
P粉116631591P粉116631591403日前410

全員に返信(2)返信します

  • P粉616111038

    P粉6161110382023-08-22 12:43:32

    Promise が解決または拒否されると、成功/エラー ハンドラーが呼び出されます:

    リーリー

    then メソッドは、promise:promiseB も返します。これは、promiseA の成功/エラー ハンドラーの戻り値に基づいて解決/拒否されます。

    promiseA の成功/エラー ハンドラーは、promiseB の結果に影響を与える 3 つの可能な値を返すことができます:

      値を返さない →promiseB はすぐに解決され、未定義がpromiseB の成功ハンドラーに渡されます
    1. 値を返す →PromiseB はすぐに解決され、値は PromiseB の成功ハンドラーに渡されます。
    2. Promise を返す → Promise が解決されると、PromiseB も解決されます。 Promise が拒否された場合、PromiseB は拒否されます。 promiseB の then ハンドラーに渡される値は、promise
    3. の結果になります。
    4. これを理解すると、次のことが理解できます:
    リーリー

    then 呼び出しはすぐにpromiseBを返します。

    promiseA が解決されると、結果が PromiseA の成功ハンドラーに渡されます。

    戻り値はpromiseAの結果1であり、成功ハンドラーは値を返すため(上記のオプション2)、promiseBはすぐに解決され、promiseBの成功ハンドラーにはpromiseAの結果1が渡されます。

    返事
    0
  • P粉155128211

    P粉1551282112023-08-22 00:10:42

    promiseAthen 関数は、promiseA が解決された直後に解決される新しい Promise (promiseB) を返します。値は次のとおりです。 promiseA の成功関数で返される値。

    この場合、promiseA は値 result に解決され、その後すぐに promiseB が値 result 1 で解決されます。 。

    promiseB の値へのアクセスは、promiseA の結果へのアクセスと同じです。

    リーリー

    ECMAScript 2016 (ES7、2016) 以降、async/await が JavaScript の標準となり、上記のアプローチの代替構文が可能になります。これで、次のように書くことができます:

    リーリー

    promiseB はありません。これは、await を使用して PromiseA の結果をアンラップしたためであり、それを直接使用できます。

    ただし、awaitasync 関数内でのみ使用できます。少し拡大してみると、上記のコードは関数内に含める必要があります:

    リーリー

    async 関数は Promise を返すため、この例の doSomething 関数の戻り値は依然として Promise であることは明らかです。したがって、戻り値にアクセスしたい場合は、result = await doSomething() を使用する必要があります。これは、別の非同期関数内でのみ使用できます。基本的に、親の非同期コンテキストでは、子の非同期コンテキストによって生成された値に直接アクセスできます。

    返事
    0
  • キャンセル返事