ホームページ > ウェブフロントエンド > jsチュートリアル > Async/Await 関数が常に Promise を返すのはなぜですか?

Async/Await 関数が常に Promise を返すのはなぜですか?

Mary-Kate Olsen
リリース: 2024-11-28 15:05:13
オリジナル
835 人が閲覧しました

Why Do Async/Await Functions Always Return Promises?

Async/Await: Promise の謎を明らかにする

async/await 機能の領域に着手すると、興味深い難題に遭遇する可能性があります。 。非同期関数は常に Promise オブジェクトを返すため、コンソールに直接ログを記録しようとすると混乱が生じるようです。

この現象をさらに深く掘り下げて、その複雑さを解明してみましょう。すべての非同期関数は Promise パラダイムに準拠し、操作の結果をカプセル化する Promise オブジェクトを返します。 await ステートメントは、Promise が解決されるか拒否されるまで関数の実行を一時停止する手段として機能します。

await は Promise を自動的にアンラップすると考える人もいるかもしれませんが、そうではありません。 await を使用すると、関数は単に待機し、その後すぐに解決される Promise を返します。ただし、実際の結果にアクセスするには、await または .then() を使用して Promise を明示的にラップ解除する必要があります。

説明のために、非同期リクエストをシミュレートする次のコード スニペットを考えてみましょう。

const getJSON = async () => {
  const request = () => new Promise((resolve, reject) => (
    setTimeout(() => resolve({ foo: 'bar'}), 2000)
  ));

  const json = await request();
  return json;
};
ログイン後にコピー

結果を直接コンソールに記録しようとすると、出力は次のようになります。 Promise:

console.log(getJSON()); // returns Promise
ログイン後にコピー

ただし、.then() を使用して Promise をアンラップすると、期待される JSON オブジェクトが明らかになります:

getJSON().then(json => console.log(json)); // prints { foo: 'bar' }
ログイン後にコピー

結論として、非同期関数は常に Promise を返し、await は単にサスペンドするだけです。解決するまで実行します。結果を取得するには、await または .then() を使用した明示的なアンラップが必要です。このメカニズムにより、Promise モデルの整合性が確保され、Promise の結果への直接アクセスが許可された場合に発生する可能性のある予期せぬ動作が防止されます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート