Promiseと.then()

Node.jsの非同期処理において、「Promise」とそのメソッド「.then()」は、非同期コードをより読みやすく、エラー処理を明確にするための重要な仕組みです。以下に、Promiseと.then()について詳しく説明します。


Promiseとは何か

基本概念

Promiseは「将来完了する可能性のある処理」を表す非同期処理の結果を表現するオブジェクトです。例えば、ファイルの読み込みやAPIの呼び出しなど、時間がかかる処理に使われます。

Promiseは3つの状態を持ちます:

状態 説明
pending 処理がまだ完了していない状態
fulfilled 処理が成功して結果が返された状態(resolveされた)
rejected 処理が失敗してエラーが返された状態(rejectされた)

Promiseの基本構文

javascript
const promise = new Promise((resolve, reject) => { // 非同期処理 if (成功した場合) { resolve(結果); } else { reject(エラー); } });

.then()メソッドの役割

.then()は、Promiseの処理が成功(fulfilled)したときに呼び出される成功時のコールバック関数を登録するメソッドです。

使用例

javascript
const promise = new Promise((resolve, reject) => { setTimeout(() => { resolve("成功しました"); }, 1000); }); promise.then(result => { console.log(result); // => "成功しました" });

チェーン構文

.then()連鎖的に繋げる(チェーンする)ことが可能です。これにより、非同期処理を順序立てて記述できます。

javascript
promise .then(result => { console.log("1:", result); return "次の処理"; }) .then(nextResult => { console.log("2:", nextResult); });

エラー処理(.catch())

Promiseで発生したエラー(rejectされた場合)は、.catch()で処理します。

javascript
promise .then(result => { console.log("成功:", result); }) .catch(error => { console.error("エラー:", error); });

まとめ

特徴 内容
状態管理 pending, fulfilled, rejected の3つの状態
.then()の役割 成功時の処理を登録
チェーン構文が可能 複数の非同期処理を順番に実行可能
.catch()でエラー処理 非同期エラーを一元的に扱える

Promiseと.then()を使うことで、コールバック地獄(callback hell)を回避し、非同期処理を直列的・論理的に記述できるため、Node.js開発において非常に重要な構文です。必要に応じて、async/awaitと組み合わせて使うことも推奨されます。

ChatGPT4o 生成日:2025/06/25