導入:なぜ「async/await」が重要なのか?
JavaScriptを学習していると、「サーバーからデータを取得する」「ファイルを読み込む」といった処理で必ず壁にぶつかるのが「非同期処理」です。これまでは「コールバック関数」や「Promise」を使って書いていましたが、コードが複雑になりやすく、読み解くのが大変でした。
「async/await」を使うと、非同期処理をまるで「上から順番に実行される普通のコード」のように書くことができます。これにより、コードの可読性が劇的に向上し、バグを減らすことができるのです。
基礎知識:非同期処理ってなに?
通常、JavaScriptのコードは上から1行ずつ順番に実行されます。しかし、サーバーとの通信のように「時間がかかる処理」を待ってしまうと、画面全体がフリーズしてしまいます。
そこで、時間がかかる処理だけを裏側で進めておき、終わったら結果を受け取る仕組みが「非同期処理」です。
asyncは「この関数内で非同期処理を扱いますよ」という宣言、awaitは「その処理が終わるまでここで待機します」という命令だと覚えてください。
実装:書き方のルール
使い方はシンプルです。
1. 非同期処理を行いたい関数の先頭に async をつける。
2. 待機したいPromiseを返す処理の前に await をつける。
これだけで、非同期処理が完了するのを待ってから次の行へ進むようになります。
サンプルプログラム:APIからデータを取得する例
以下のコードは、疑似的に通信を行う関数を呼び出す例です。そのままコピーして実行してみてください。
// サーバーからデータを取得するような「時間がかかる処理」を模した関数
function fetchData() {
return new Promise((resolve) => {
setTimeout(() => {
resolve("データ取得成功!");
}, 2000); // 2秒後に完了する
});
}
// asyncをつけた関数を定義
async function showData() {
console.log("読み込み中...");
// awaitを使うことで、fetchDataが終わるまでここで一時停止する
const result = await fetchData();
// 上の処理が終わってから次の行が実行される
console.log(result);
console.log("処理完了!");
}
// 関数を実行
showData();
応用・注意点:現場で役立つポイント
現場で活用する際に注意すべき点は主に2つあります。
1. try…catchでのエラーハンドリング
awaitで待機している処理が失敗した際、そのまま放置するとプログラムが止まってしまいます。必ず try { … } catch (error) { … } で囲み、エラーが発生した時の処理を書いておきましょう。
2. awaitはasync関数の中だけでしか使えない
トップレベル(関数の外)でawaitを書こうとするとエラーになります。必ず「asyncをつけた関数」の中で使用してください。
最初は難しく感じるかもしれませんが、一度「上から下に流れるように書ける」という感覚を掴めば、非同期処理のストレスは大幅に減ります。ぜひ積極的に使ってみてください!