ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の非同期関数: 暗黙的な Promise か明示的な戻り値?

JavaScript の非同期関数: 暗黙的な Promise か明示的な戻り値?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 18:36:12703ブラウズ

Async Functions in JavaScript: Implicit Promise or Explicit Return Value?

非同期関数: 暗黙的な 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。