
JavaScriptのasync/await、もう怖くない!非同期処理をスッキリ書く方法を伝授します。
async/awaitとは?JavaScriptの非同期処理をわかりやすく解説
JavaScriptにおける非同期処理は、Webアプリケーションのパフォーマンスを向上させるために不可欠です。特に、APIからのデータ取得やファイルの読み込みなど、時間のかかる処理をスムーズに行うために重要な役割を果たします。async/awaitは、Promiseベースの非同期処理をよりシンプルに、同期処理のように記述できるようにする構文です。
この記事では、async/awaitの基本的な使い方から、具体的なコード例、そしてエラーハンドリングまで、初心者にもわかりやすく解説します。非同期処理をマスターして、より効率的で快適なWebアプリケーション開発を目指しましょう。
Promiseとは?async/awaitの前に理解すべきこと
async/awaitを理解するには、まずPromiseについて理解しておく必要があります。Promiseは、非同期処理の結果を表現するオブジェクトです。処理が成功した場合はresolve、失敗した場合はrejectを呼び出すことで、結果を通知します。
// Promiseの基本的な使い方
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("処理が完了しました!");
// reject("エラーが発生しました");
}, 1000);
});
myPromise
.then(result => {
console.log(result); // → "処理が完了しました!"
})
.catch(error => {
console.error(error);
});
上記の例では、myPromise
は1秒後にresolveされます。.then()
メソッドを使って、resolveされた値を受け取り、コンソールに出力しています。もしrejectされた場合は、.catch()
メソッドでエラーをキャッチできます。
async関数の基本的な使い方
async関数は、asyncキーワードを関数の定義の前につけることで定義します。async関数の中では、awaitキーワードを使ってPromiseのresolveを待つことができます。
// async/await の基本例
async function fetchData() {
const response = await fetch("https://jsonplaceholder.typicode.com/posts/1");
const data = await response.json();
console.log(data);
}
fetchData();
この例では、fetchData
関数はasync関数として定義されています。await fetch(...)
は、fetch APIがPromiseをresolveするまで一時停止します。resolveされた値(ここではレスポンスオブジェクト)は、response変数に格納されます。同様に、await response.json()
もJSONデータがresolveされるまで一時停止し、結果をdata変数に格納します。
async関数は常にPromiseを返します。したがって、fetchData()
の呼び出しは、.then()
メソッドを使って結果を処理できます。
awaitキーワードの使い方
awaitキーワードは、async関数の中でPromiseがresolveされるのを待ちます。awaitキーワードを使うことで、非同期処理を同期処理のように記述できます。
awaitはasync関数の中でのみ使用可能です。async関数外で使用するとSyntaxErrorが発生します。
エラーハンドリング
async/awaitを使った場合のエラーハンドリングは、try…catch文を使用します。
// async/await + try...catch
async function fetchDataWithErrorHandling() {
try {
const response = await fetch("https://jsonplaceholder.typicode.com/invalid-url");
const data = await response.json();
console.log(data);
} catch (error) {
console.error("エラーが発生しました:", error);
}
}
fetchDataWithErrorHandling();
この例では、fetch
関数とresponse.json()
の呼び出しをtry
ブロックで囲んでいます。もしエラーが発生した場合、catch
ブロックが実行され、エラーメッセージがコンソールに出力されます。
async/awaitのメリット・デメリット
async/awaitを使うメリットは、コードが読みやすく、書きやすくなることです。また、エラーハンドリングが容易になるという利点もあります。
デメリットとしては、async/awaitはPromiseベースであるため、Promiseを理解している必要があること、そして、async関数の中でしかawaitを使用できないことが挙げられます。
参考リンク
まとめ
async/awaitは、JavaScriptの非同期処理をよりシンプルに記述するための強力な構文です。Promiseと組み合わせることで、複雑な非同期処理も容易に扱えるようになります。ぜひ、async/awaitをマスターして、より効率的なWebアプリケーション開発に役立ててください。