Node.jsは、非同期処理を得意としています。非同期処理は、簡単に言うと、「ある処理を待たずに次の処理を進める」ことを意味します。これによって、アプリケーションのレスポンスが良くなり、快適な使用感を実現できます。しかし、非同期処理にはいくつかの方法があり、それぞれに特徴があります。今回は、コールバック、Promise、Async、Awaitについて解説します。
コールバックは、最も基本的な非同期処理の方法です。関数に別の関数を渡すことで、処理が完了した後にその関数を呼び出します。以下に簡単な例を示します。
function fetchData(callback) {
setTimeout(() => {
const data = 'データを取得しました';
callback(data);
}, 1000);
}
fetchData((result) => {
console.log(result);
});
上記のコードでは、fetchData
関数が時間がかかる処理を模擬しており、1秒後にデータを取得してコールバック関数を呼び出します。これで非同期に処理を行うことができます。
コールバックを使うと、複雑な処理を重ねると「コールバック地獄」と呼ばれる状態に陥ることがあります。そこで登場するのが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
メソッドを使って、結果を受け取ることができます。
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を積極的に使っていきましょう!