ホームページ >ウェブフロントエンド >jsチュートリアル >Async/Await 関数が常に Promise を返すのはなぜですか?
なぜ async/await は常に Promise を返すのですか?
async/await 機能の使用は、最初は、特に次の点に関しては困惑するかもしれません。 async 関数によって返された Promise を処理します。提供されたコードで強調表示されている動作を詳しく見てみましょう。
<br>const getJSON = async () => {<br> const request = () => new Promise((解決、拒否) => (</p> <pre class="brush:php;toolbar:false">setTimeout(() => resolve({ foo: 'bar'}), 2000)
));
const json = await request();
return json;
}
getJSON() を実行すると、関数Promise オブジェクトを返します。これは、すべての非同期関数が内部で Promise を返すために発生します。 await キーワードはこの Promise に対して動作し、Promise が解決または拒否されるまで関数の実行を一時停止します。
この例では、await は request() が解決されるまで待機します。ただし、Promise は自動的にアンラップされません。返された Promise は、await または .then() を使用して明示的に処理する必要があります。
提供されたコードに示すように、.then() を使用します:
<br>getJSON ().then(json => console.log(json)); // prints { foo: 'bar' }<br>
は、Promise が解決され、結果が json パラメータとして渡されるときにコールバック関数を呼び出します。このアプローチにより、コールバック内の解決された値にアクセスできるようになります。
一方、console.log(getJSON()) を使用して非同期関数の結果を直接ログに記録すると、ラップが解除されないため、Promise オブジェクトが返されます。約束。 Promise モデルでは、Promise の結果には Promise 自体からアクセスするか、.then() のような明示的なアンラップ メソッドを使用することによってのみアクセスできることが保証されます。
以上がAsync/Await 関数が常に Promise を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。