Node.jsでの非同期処理:コールバック、Promise、Async、Await

2024/07/20
x-logoline-logo

Node.jsでの非同期処理:コールバック、Promise、Async、Await

2024/07/20
x-logoline-logo
PR

Node.jsは、非同期処理を得意としています。非同期処理は、簡単に言うと、「ある処理を待たずに次の処理を進める」ことを意味します。これによって、アプリケーションのレスポンスが良くなり、快適な使用感を実現できます。しかし、非同期処理にはいくつかの方法があり、それぞれに特徴があります。今回は、コールバック、Promise、Async、Awaitについて解説します。

コールバック

コールバックは、最も基本的な非同期処理の方法です。関数に別の関数を渡すことで、処理が完了した後にその関数を呼び出します。以下に簡単な例を示します。

function fetchData(callback) {
    setTimeout(() => {
        const data = 'データを取得しました';
        callback(data);
    }, 1000);
}

fetchData((result) => {
    console.log(result);
});

上記のコードでは、fetchData関数が時間がかかる処理を模擬しており、1秒後にデータを取得してコールバック関数を呼び出します。これで非同期に処理を行うことができます。

Promise

コールバックを使うと、複雑な処理を重ねると「コールバック地獄」と呼ばれる状態に陥ることがあります。そこで登場するのがPromiseです。Promiseは「未来の値を表すオブジェクト」で、処理が完了したときにその結果を受け取ることができます。

function fetchData() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            const data = 'データを取得しました';
            resolve(data);
        }, 1000);
    });
}

fetchData().then((result) => {
    console.log(result);
});

Promiseを使うことで、処理が成功した場合はresolve、失敗した場合はrejectを呼び出します。thenメソッドを使って、結果を受け取ることができます。

Async / Await

Promiseをさらに使いやすくするための構文がAsyncとAwaitです。これを使うと、非同期処理をまるで同期処理のように書くことができます。

async function fetchData() {
    const data = await new Promise((resolve) => {
        setTimeout(() => {
            resolve('データを取得しました');
        }, 1000);
    });
    return data;
}

(async () => {
    const result = await fetchData();
    console.log(result);
})();

ここでのasyncは関数が非同期であることを示し、awaitはPromiseの結果が返るのを待つためのキーワードです。これにより、コードがとても読みやすくなります。

まとめ

今回はNode.jsにおける非同期処理の代表的な方法であるコールバック、Promise、Async/Awaitについて学びました。それぞれの方法には特徴があり、状況に応じて使い分ける必要があります。初めはコールバックから始めるのが良いですが、慣れてきたらPromiseやAsync/Awaitを積極的に使っていきましょう!

この記事はAIを使用して作成されています。
PR