Promiseオブジェクトの定義 | Promiseの基本 | JavaScript 超完全入門 基本から発展までのすべて

現在作成中です。今後加筆修正してまいります。
スポンサーリンク
スポンサーリンク

Promiseオブジェクトとは?

Promiseオブジェクトは、JavaScriptにおける非同期処理を管理するための強力なツールです。Promiseは「約束」を意味し、何らかの非同期処理が完了したとき、その結果を受け取ることができます。Promiseオブジェクトを使うことで、複数の非同期処理を順番に実行する際に発生する「コールバック地獄」を回避し、よりシンプルで分かりやすいコードを記述することが可能になります。

Promiseオブジェクトの定義

Promiseオブジェクトは、new Promise()という構文で定義されます。Promiseは非同期処理の結果に応じて、resolveまたはrejectというコールバック関数を呼び出します。resolveが成功した場合、次の処理に進み、rejectが呼ばれた場合はエラーとして処理されます。

Promiseオブジェクトの基本的な構文

const promise = new Promise(function(resolve, reject) {
    // 非同期処理を実行
    const success = true; // 成功の場合

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

この例では、Promiseオブジェクトが定義され、成功の場合にはresolve、失敗の場合にはrejectが呼ばれます。

Promiseの3つの状態

Promiseオブジェクトは、非同期処理の結果に応じて以下の3つの状態を持ちます。

状態 説明
pending 非同期処理がまだ完了していない状態。
fulfilled 非同期処理が成功し、resolveが呼ばれた状態。
rejected 非同期処理が失敗し、rejectが呼ばれた状態。

Promiseの実行フロー

Promiseオブジェクトは、thenメソッドやcatchメソッドを使って、非同期処理が完了したときの処理を定義します。

Promiseの実行フローの例

const promise = new Promise(function(resolve, reject) {
    setTimeout(function() {
        const success = true; // 成功の場合
        if (success) {
            resolve("データ取得成功");
        } else {
            reject("データ取得失敗");
        }
    }, 2000); // 2秒後に実行
});

promise.then(function(result) {
    console.log(result); // "データ取得成功" が出力される
}).catch(function(error) {
    console.error(error); // エラーが出力される
});

この例では、Promiseオブジェクトが2秒後に実行され、resolveが呼ばれた場合にはthenブロックが実行され、rejectが呼ばれた場合にはcatchブロックが実行されます。

Promiseの活用方法

Promiseは、主に非同期処理を直線的に記述する際に使われます。これにより、複数の非同期処理を順番に実行しながらも、コールバック関数をネストさせずに、可読性の高いコードを実現できます。

Promiseチェーンによる連続処理の例

function fetchData1() {
    return new Promise(function(resolve) {
        setTimeout(function() {
            console.log("データ1取得完了");
            resolve();
        }, 1000);
    });
}

function fetchData2() {
    return new Promise(function(resolve) {
        setTimeout(function() {
            console.log("データ2取得完了");
            resolve();
        }, 1000);
    });
}

fetchData1()
    .then(fetchData2)
    .then(function() {
        console.log("すべてのデータ取得完了");
    });

この例では、Promiseチェーンを使って複数の非同期処理を連続して実行しています。それぞれの処理が完了した後に、次の処理が実行されるため、コードがシンプルでわかりやすくなっています。

Promiseの利点と欠点

Promiseオブジェクトは、非同期処理をシンプルにする強力なツールですが、いくつかの利点と欠点があります。

利点 欠点
コールバック地獄の回避 複数のPromiseを組み合わせた場合、チェーンが長くなりコードが複雑化することもある。
可読性の向上 Promiseの基本的な構造を理解するのに時間がかかる場合がある。
エラーハンドリングの一元化 Promiseチェーンの中でエラーが発生すると、すべてのcatchでハンドリングする必要がある。

まとめ

Promiseオブジェクトは、JavaScriptにおける非同期処理を簡潔に管理するための重要なツールです。Promiseの活用によって、コールバックのネスト問題を回避し、複数の非同期処理を直感的に記述できるようになります。また、thencatchを使ったエラーハンドリングもシンプルで、非同期処理の管理が大幅に簡単になります。