1
0

More than 1 year has passed since last update.

JavaScript の非同期処理をざっくり理解する【async, await 編】

Last updated at Posted at 2022-12-14

▼ 前回の Promise 編はこちらです。

「非同期処理とは?」という部分については Promise 編で解説したのでよければご覧ください。
今回は非同期処理を同期処理のように実行できる async , await 構文についてみていきます!

async , await 構文の使い方

async は関数を非同期関数にするキーワードです。
await は async をつけた非同期関数の中で非同期処理を行う部分の頭につけることで、処理結果を待つことができます。

※ ES2022 で async 関数の外でも使えるトップレベル await が登場しましたが、訳がわからなくなるので一旦放っておきましょう

言葉だけではさっぱり分からないので、実際にコードを見ていきましょう。

async function example() {
  // 非同期処理を実行するコード
  const result = await fetch('https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json');

  // 非同期処理の結果を使用するコード
  console.log(result);
}

// 参考: https://developer.mozilla.org/ja/docs/Learn/JavaScript/Asynchronous/Promises

実行するとこのような Response オブジェクトが表示されたでしょうか?

この部分が console.log(result); の実行結果です。

コードを見ていきましょう。

まずは async キーワードを使用して非同期処理を実行する関数 example を定義しています。

次に await キーワードを使用して fetch の処理結果を待機します。
これで example の中では fetch の処理が終わるまでその他の処理が行われなくなりました。

console.log の実行は fetch が終了するまで待ってくれるので、結果を result に格納してコンソールに表示することができましたね。

では、下にコンソールを足してみましょう。

async function example() {
  // 非同期処理を実行するコード
  const result = await fetch('https://mdn.github.io/learning-area/javascript/apis/fetching-data/can-store/products.json');

  // 非同期処理の結果を使用するコード
  console.log(result);
}
example();
console.log("hello!")

???

"hello!" が先に表示されていますね。

一見不可解なようですが、 async をつけた関数は非同期関数になります。つまり example 自体が非同期で処理され、console.log("Hello") と並列に処理されているのです。
不可解な動作を防ぐための重要ポイントなので覚えておきましょう。

まとめ

  • async: 非同期処理を実行する関数を定義するキーワード
  • await: 処理結果を待機するキーワード
  • async 関数は非同期処理されるので注意!

参考資料

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0