async
公開日: 2025/06/02
asyncとは?──Promiseベースの非同期処理をもっと直感的に書く構文
はじめに
JavaScript の非同期処理は、
Promise
によって構造化されました。しかし
.then()
や .catch()
が重なっていくと、やはり見通しが悪くなることがあります。その問題を解決し、同期処理のように書ける非同期構文が
async/await
。本記事では、その中でも中心となる
async
の意味・使い方・Promiseとの関係・実用例 までを解説します。
基本情報・概要
async
は、関数を非同期関数として定義するためのキーワードです。非同期関数は必ず
Promise
を返し、その中で await
を使うことで、Promiseの結果をまるで同期処理のように待機して扱えます。
主な特徴:
- 自動的に Promise を返す
によって非同期処理の完了を待つawait
で明快なエラーハンドリングが可能try/catch
- 非同期フローを直列・並列で柔軟に構成可能
async
は、「非同期を、読みやすく、安全に記述するための約束」です。
比較・分類・特徴の表形式まとめ(任意)
構文/キーワード | 役割・特徴 |
---|---|
async | 関数を非同期関数にする(戻り値はPromise) |
await | Promiseの完了を待つ(非同期関数の中でのみ使用可) |
try/catch | 非同期エラーも同期的に扱える |
return | 任意の値を Promise.resolve(value) として返す |
async/await
は Promiseベースでありながら、同期風に書ける最強の構文です。
深掘り解説
✅ 基本的な使い方
async function fetchUserData() { const res = await fetch('/api/user'); const data = await res.json(); return data; } fetchUserData() .then(user => console.log(user)) .catch(err => console.error(err));
は Promise を返すfetchUserData()
によって、await
やfetch()
の完了を待つres.json()
- エラーが起きた場合は
または.catch()
で処理try/catch
✅ try/catch によるエラーハンドリング
async function loadData() { try { const response = await fetch('/api/data'); const data = await response.json(); console.log(data); } catch (error) { console.error("読み込みエラー:", error); } } loadData();
- 非同期関数内のエラーも
で扱えるtry/catch
- 複雑な
チェーンよりシンプルで可読性が高い.catch()
応用・発展的な使い方
-
複数非同期の並列実行(
と組み合わせ)Promise.all()
const [user, posts] = await Promise.all([ fetchUser(), fetchPosts() ]);
-
非同期イテレーション(for await...of)
for await (const item of asyncGenerator()) { console.log(item); }
-
関数式・アロー関数でも使える
const run = async () => { const data = await getData(); };
async
は**構文的糖衣(syntactic sugar)**であり、本質はすべて Promise ベースです。
よくある誤解と注意点(任意)
- async関数は常にPromiseを返す:
はreturn 42
になるPromise.resolve(42)
- await は async関数内でしか使えない:グローバルなどでは SyntaxError
- await の使いすぎで並列性が落ちることも:独立処理は
に分離Promise.all()
- 例外の伝播に注意:非同期関数内で明示的に
したエラーもthrow
となるPromise.reject()
async/await
は便利な反面、設計の意図と構造の明確化が必要な構文です。
まとめ
async
は、Promiseベースの非同期処理を直感的に、かつ読みやすく記述するための構文です。非同期の本質を保ちながら、同期処理のように記述できることで、可読性と保守性が大幅に向上します。
async/await は今やモダンJavaScript開発の標準。Promiseの理解とセットで習得することで、非同期設計の強力な武器となるでしょう。