P粉6161110382023-08-22 12:43:32
Promise が解決または拒否されると、成功/エラー ハンドラーが呼び出されます:
リーリーthen
メソッドは、promise:promiseB も返します。これは、promiseA の成功/エラー ハンドラーの戻り値に基づいて解決/拒否されます。
then 呼び出しはすぐにpromiseBを返します。
promiseA が解決されると、結果が PromiseA の成功ハンドラーに渡されます。
戻り値はpromiseAの結果1であり、成功ハンドラーは値を返すため(上記のオプション2)、promiseBはすぐに解決され、promiseBの成功ハンドラーにはpromiseAの結果1が渡されます。
P粉1551282112023-08-22 00:10:42
promiseA
の then
関数は、promiseA
が解決された直後に解決される新しい Promise (promiseB
) を返します。値は次のとおりです。 promiseA
の成功関数で返される値。
この場合、promiseA
は値 result
に解決され、その後すぐに promiseB
が値 result 1
で解決されます。 。
promiseB
の値へのアクセスは、promiseA
の結果へのアクセスと同じです。
ECMAScript 2016 (ES7、2016) 以降、async
/await
が JavaScript の標準となり、上記のアプローチの代替構文が可能になります。これで、次のように書くことができます:
promiseB はありません。これは、await
を使用して PromiseA の結果をアンラップしたためであり、それを直接使用できます。
ただし、await
は async
関数内でのみ使用できます。少し拡大してみると、上記のコードは関数内に含める必要があります:
async 関数は Promise を返すため、この例の doSomething
関数の戻り値は依然として Promise であることは明らかです。したがって、戻り値にアクセスしたい場合は、result = await doSomething()
を使用する必要があります。これは、別の非同期関数内でのみ使用できます。基本的に、親の非同期コンテキストでは、子の非同期コンテキストによって生成された値に直接アクセスできます。