カテゴリ: JavaScript 更新日: 2026/04/04

JavaScriptのPromiseとは?基本の使い方とエラーハンドリングを初心者向けに徹底解説

JavaScriptのPromiseとは?基本の使い方とエラーハンドリング
JavaScriptのPromiseとは?基本の使い方とエラーハンドリング

先生と生徒の会話形式で理解しよう

生徒

「JavaScriptのPromiseってよく聞くんですが、そもそもPromiseって何ですか?」

先生

「Promiseは、JavaScriptで非同期処理をわかりやすく書くための仕組みです。時間がかかる処理の結果を、あとから受け取るための約束のようなものです。」

生徒

「非同期処理って何ですか?」

先生

「例えば、インターネットからデータを取得する処理です。すぐに結果が返ってこない処理を、待ちながら他の作業もできるようにする仕組みが非同期処理です。Promiseはその管理をしてくれます。」

1. JavaScriptのPromiseとは何か

1. JavaScriptのPromiseとは何か
1. JavaScriptのPromiseとは何か

JavaScriptのPromiseとは、非同期処理の結果を表すオブジェクトです。非同期処理とは、時間がかかる処理を待っている間も、他の処理を同時に進めることができる仕組みのことです。例えば、サーバー通信やファイル読み込みなどが代表的な例です。

Promiseは、将来成功するか失敗するかが決まる処理の結果をあらかじめ表現しておくためのものです。約束という意味の通り、あとで結果を渡しますという約束をするイメージです。

JavaScriptのPromiseには三つの状態があります。処理中の状態、成功した状態、失敗した状態です。この状態の変化を管理することで、エラーハンドリングや結果の受け取りが簡単になります。

2. 非同期処理とは何かをやさしく理解する

2. 非同期処理とは何かをやさしく理解する
2. 非同期処理とは何かをやさしく理解する

非同期処理という言葉は難しく聞こえますが、順番に待たずに進める処理と考えるとわかりやすいです。例えば、料理をしているときにお湯を沸かしている間に野菜を切るようなイメージです。

JavaScriptは基本的に一つずつ順番に処理を実行します。しかし、インターネット通信のように時間がかかる処理では、ずっと待っていると他の処理が止まってしまいます。そこでPromiseを使うことで、処理が終わったら知らせてもらう仕組みを作ることができます。

3. Promiseの基本的な使い方

3. Promiseの基本的な使い方
3. Promiseの基本的な使い方

まずはPromiseの基本構文を見てみましょう。Promiseはnew Promiseで作成します。中には関数を書き、成功した場合と失敗した場合の処理を定義します。


const promise = new Promise((resolve, reject) => {
  const success = true;

  if (success) {
    resolve("成功しました");
  } else {
    reject("失敗しました");
  }
});

promise.then((result) => {
  console.log(result);
}).catch((error) => {
  console.log(error);
});

resolveは成功したときに呼び出す関数です。rejectは失敗したときに呼び出す関数です。thenは成功時の処理、catchはエラー発生時の処理を書きます。


成功しました

4. thenメソッドで結果を受け取る

4. thenメソッドで結果を受け取る
4. thenメソッドで結果を受け取る

Promiseが成功した場合、thenメソッドの中に書いた処理が実行されます。thenは結果を受け取るためのメソッドです。メソッドとは、オブジェクトに対して使う機能のことです。


function getNumber() {
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve(100);
    }, 1000);
  });
}

getNumber().then((num) => {
  console.log("受け取った数値:", num);
});

setTimeoutは一定時間後に処理を実行する関数です。この例では一秒後に数値を返しています。非同期処理の流れを体験できる簡単なサンプルです。


受け取った数値: 100

5. catchでエラーハンドリングを行う

5. catchでエラーハンドリングを行う
5. catchでエラーハンドリングを行う

JavaScriptのPromiseでは、エラーハンドリングも重要です。エラーハンドリングとは、プログラムのエラーを安全に処理する仕組みのことです。Promiseではcatchを使ってエラーを受け取ります。


function divide(a, b) {
  return new Promise((resolve, reject) => {
    if (b === 0) {
      reject("ゼロで割ることはできません");
    } else {
      resolve(a / b);
    }
  });
}

divide(10, 0)
  .then((result) => {
    console.log("結果:", result);
  })
  .catch((error) => {
    console.log("エラー:", error);
  });

エラー: ゼロで割ることはできません

このように、エラーが起きてもプログラム全体が止まらないように制御できます。これがPromiseを使ったエラーハンドリングの基本です。

6. Promiseチェーンで処理をつなげる

6. Promiseチェーンで処理をつなげる
6. Promiseチェーンで処理をつなげる

Promiseは連続してつなげることができます。これをチェーンと呼びます。チェーンを使うと、複数の非同期処理を順番に実行できます。


new Promise((resolve) => {
  resolve(5);
})
.then((num) => {
  return num * 2;
})
.then((num) => {
  return num + 3;
})
.then((result) => {
  console.log("最終結果:", result);
});

最終結果: 13

このようにthenをつなげることで、処理結果を次の処理へ渡せます。JavaScriptの非同期処理をきれいに書くために重要な考え方です。

7. Promiseを使うメリットと注意点

7. Promiseを使うメリットと注意点
7. Promiseを使うメリットと注意点

JavaScriptでPromiseを使うメリットは、非同期処理の流れが整理されて読みやすくなることです。従来のコールバック関数だけで書くと、処理が入れ子になりやすく、可読性が下がります。Promiseを使えば、thenやcatchで流れを明確にできます。

一方で注意点もあります。必ずcatchでエラーを受け取るようにしないと、エラーが見逃される可能性があります。また、Promiseの中で例外が発生すると自動的にreject扱いになることも覚えておきましょう。

JavaScriptのPromiseは、現代のWeb開発では必須の知識です。非同期処理、エラーハンドリング、then、catch、resolve、rejectといったキーワードを理解することで、より実践的なプログラムが書けるようになります。

まとめ

まとめ
まとめ

今回はJavaScriptのPromiseとは何かという基本から、非同期処理の仕組み、thenメソッドによる結果の受け取り方、catchを使ったエラーハンドリング、そしてPromiseチェーンによる処理の連結までを丁寧に解説しました。JavaScriptのPromiseは、非同期処理をわかりやすく管理するための重要なオブジェクトです。サーバー通信やデータ取得、タイマー処理など、時間がかかる処理を安全に扱うために欠かせない知識です。

非同期処理という考え方を理解することで、JavaScriptの動き方がより明確になります。Promiseは成功と失敗という二つの結果を管理し、resolveとrejectによって状態を切り替えます。そしてthenで成功時の処理を書き、catchでエラー発生時の処理を書くことで、プログラム全体の安全性と可読性を高めることができます。

特にエラーハンドリングは、実務レベルのWeb開発では非常に重要です。エラーを適切に処理しないと、画面が正しく表示されなかったり、予期しない動作が発生したりします。Promiseのcatchを正しく使うことで、エラーを検知し、ユーザーにわかりやすいメッセージを表示することができます。

また、Promiseチェーンを使うことで、複数の非同期処理を順番に実行することが可能になります。thenを連続してつなげることで、前の処理結果を次の処理へ受け渡すことができます。これにより、複雑な非同期処理も整理されたコードで書くことができます。

ここで改めて、Promiseの基本的な流れを確認してみましょう。まずnew Promiseでオブジェクトを作成し、その中でresolveまたはrejectを呼び出します。その後、thenで成功時の処理を定義し、catchで失敗時の処理を定義します。この流れを理解しておくことが、JavaScriptの非同期処理を攻略する第一歩です。


function fetchData(flag) {
  return new Promise((resolve, reject) => {
    if (flag) {
      resolve("データ取得に成功しました");
    } else {
      reject("データ取得に失敗しました");
    }
  });
}

fetchData(true)
  .then((message) => {
    console.log(message);
    return "次の処理へ進みます";
  })
  .then((next) => {
    console.log(next);
  })
  .catch((error) => {
    console.log("エラー発生:", error);
  });

データ取得に成功しました
次の処理へ進みます

このサンプルプログラムでは、Promiseの成功時にメッセージを表示し、その結果を次のthenへ渡しています。もし失敗した場合はcatchが実行されます。このようにPromiseは、成功と失敗を明確に分けて処理できるため、非同期処理のコードが整理され、読みやすくなります。

JavaScriptのPromiseを理解することで、非同期処理の流れがはっきりと見えるようになります。さらに発展させると、asyncやawaitといった構文も理解しやすくなりますが、まずはPromiseの基本構文とエラーハンドリングの考え方をしっかり身につけることが大切です。

非同期処理、Promise、then、catch、resolve、reject、エラーハンドリング、Promiseチェーンといったキーワードは、JavaScript学習において何度も登場します。これらを正しく理解することで、実践的なWebアプリケーション開発へとステップアップできます。基礎を繰り返し確認しながら、実際にコードを書いて体験することが上達への近道です。

先生と生徒の振り返り会話

生徒

「Promiseは非同期処理の結果をあとから受け取るための仕組みだということがわかりました。成功と失敗を分けて書けるのが便利ですね。」

先生

「その通りです。JavaScriptのPromiseは非同期処理を整理するための重要な仕組みです。resolveとrejectで状態を決め、thenとcatchで結果を受け取ります。」

生徒

「エラーハンドリングが大切だということも理解できました。catchを書かないとエラーを見逃してしまうのですね。」

先生

「はい。エラーハンドリングは実務でもとても重要です。Promiseを使えば、エラー処理を明確に書くことができます。これにより、安全で読みやすいコードになります。」

生徒

「Promiseチェーンも理解できました。thenをつなげることで、順番に処理できるのですね。」

先生

「その理解で完璧です。JavaScriptのPromiseを使いこなせるようになると、非同期処理が怖くなくなります。何度もコードを書いて練習し、非同期処理とエラーハンドリングを自分のものにしてください。」

関連記事:
カテゴリの一覧へ
新着記事
New1
JavaScript
JavaScriptの配列を逆順にする方法(reverseメソッド活用)
New2
JavaScript
JavaScriptの配列の並べ替え(sortメソッド)の基本とカスタマイズ
New3
TypeScript
TypeScriptとJSDocを併用して型推論を強化!初心者向けガイド
New4
JavaScript
JavaScriptの配列の長さ(lengthプロパティ)を理解しよう
人気記事
No.1
Java&Spring記事人気No1
JavaScript
JavaScriptのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.2
Java&Spring記事人気No2
TypeScript
TypeScriptの型定義ファイル管理を徹底解説!読み込み順序とDefinitelyTypedの仕組み
No.3
Java&Spring記事人気No3
TypeScript
TypeScriptで型定義を拡張する方法を徹底解説!モジュール拡張とDefinitelyTypedの使い方
No.4
Java&Spring記事人気No4
TypeScript
TypeScript型定義ファイル(d.ts)の分割構成を徹底解説!大規模開発でも迷わない管理術
No.5
Java&Spring記事人気No5
JavaScript
JavaScriptプログラムの実行方法まとめ!ブラウザ・Node.js・コンソールの使い方
No.6
Java&Spring記事人気No6
TypeScript
TypeScript学習におすすめの無料教材・リファレンスサイト【初心者向け】
No.7
Java&Spring記事人気No7
TypeScript
TypeScriptで型定義を参照する方法!triple-slash directives(三斜線ディレクティブ)を徹底解説
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptでコメントを書く正しい書き方と使い分け【初心者向けにやさしく解説】