ホームページ >ウェブフロントエンド >jsチュートリアル >非同期関数は常に Promise を返しますか?

非同期関数は常に Promise を返しますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-25 02:09:12817ブラウズ

Do Async Functions Always Return Promises?

質問: 非同期関数は暗黙的に Promise を返しますか?

JavaScript では、非同期関数は async キーワードを使用して宣言され、自動的に返されると考えられています。返す約束。ただし、これにより潜在的な矛盾が生じます。Promise 以外の値が明示的に返されると、関数はその値を Promise でラップしているように見えます。

答え: すべての非同期関数は Promise を返します

観察された動作は正しいです。すべての非同期関数は暗黙的に Promise を返します。具体的には:

  • 非同期関数が明示的な return ステートメントなしで戻る場合、未定義に解決された Promise を返します。
  • 非同期関数が明示的に非 Promise 値を返す場合、ラップされます。その値に解決された Promise 内の値。
  • 非同期関数に await 式が含まれている場合でも、戻り値は結果をラップした Promise です。
  • 非同期関数内でエラーがスローされた場合、返された Promise はそのエラーで拒否されます。

例:

async function increment(num) {
  return num + 1;
}

// Logs 4, as the returned promise resolves to 4.
increment(3).then(num => console.log(num));

ラッピング動作:

このラッピング動作はジェネレーター関数に固有です。たとえば、ジェネレーター関数も Promise を返しますが、その方法は異なります:

function* foo() {
  return 'test';
}

// Logs an object, not "test".
console.log(foo());

// Logs 'test' by explicitly calling .next() on the generator function.
console.log(foo().next().value);

以上が非同期関数は常に Promise を返しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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