非同期関数: 暗黙的な Promise Return か明示的な制御?
JavaScript の非同期関数 (async キーワードで示される) は、暗黙的に実行されると言われることがよくあります。返す約束。しかし、詳しく調べると、現実はさらに微妙であることがわかります。
デフォルトでは、Promise が明示的に返されない場合、非同期関数は確かに Promise を返します。これは、次のコード:
async function getVal() { const result = await doSomethingAsync(); return result; }
が
async function getVal() { const result = await doSomethingAsync(); return Promise.resolve(result); }
と同等であることを意味します。ただし、非 Promise 値を明示的に返す場合、関数は自動的にそれを Promise でラップします。 。たとえば、次の例では、
async function getVal() { return doSomethingNonAsync(); }
getVal は実際に doSomethingNonAsync() の結果を含む Promise オブジェクトを返します。
この動作は従来の JavaScript 関数とは異なることに注意してください。通常の関数からプリミティブ値を明示的に返すと、その値はすぐに返されます。ただし、非同期関数は常に Promise を返し、必要に応じて非 Promise 値をラップします。
これは矛盾しているように見えるかもしれませんが、ES6 のジェネレーターの概念と一致しています。ジェネレーターは、return ステートメントと同じ値を返さない関数です。代わりに、一連の値が生成され、yield 演算子を使用して反復できます。
例:
function* getVal() { yield doSomethingAsync(); return 'finished'; } // Logs an object. console.log(getVal()); // Logs 'yikes' and then 'finished'. for (const val of getVal()) { console.log(val); }
以上がJavaScript の非同期関数: 暗黙的な Promise か明示的な戻り値?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。