非同期処理とは
非同期処理とは、他の処理を待たずに実行される操作のことです。通常、JavaScriptはコードを上から下に逐次実行しますが、非同期処理を使うことで時間がかかるタスク(サーバーへのリクエスト、タイマーなど)が完了するのを待たずに他のコードを実行することができます。これにより、ウェブページの操作性が向上し、ユーザーにとってスムーズな体験を提供できます。
setTimeout
とsetInterval
JavaScriptにはタイマーを使った非同期処理のためのメソッドがあり、一定の時間後に実行する処理や、定期的に繰り返す処理を設定できます。
setTimeout()
setTimeout()
は指定した時間が経過した後に一度だけ関数を実行します。javascriptsetTimeout(() => { console.log('2秒後に実行されました'); }, 2000); // 2000ミリ秒(2秒)後に実行
この例では、2秒後にコンソールにメッセージを表示します。
setInterval()
setInterval()
は指定した間隔で繰り返し関数を実行します。javascriptlet count = 0; const intervalId = setInterval(() => { count++; console.log(`繰り返し処理: ${count}`); if (count === 5) { clearInterval(intervalId); // 5回実行した後に停止 } }, 1000); // 1000ミリ秒(1秒)ごとに実行
この例では、1秒ごとにメッセージを表示し、5回実行した後に停止します。
clearInterval()
を使ってタイマーを解除します。
Promise
とasync/await
非同期処理の管理を容易にするために、JavaScriptでは Promise
と async/await
を使用します。これにより、非同期処理の結果を待つことができ、コードが分かりやすくなります。
Promise
Promise
は非同期処理の結果を表し、成功(resolve
)か失敗(reject
)のいずれかの状態になります。javascriptconst promise = new Promise((resolve, reject) => { let success = true; if (success) { resolve('成功しました!'); } else { reject('エラーが発生しました'); } }); promise .then(result => { console.log(result); // 出力: 成功しました! }) .catch(error => { console.log(error); // エラーの場合に出力 });
この例では、
Promise
オブジェクトを使って、非同期処理が成功した場合はresolve
、失敗した場合はreject
を呼び出します。そして、.then()
で成功時の処理、.catch()
でエラー時の処理を行います。async/await
async/await
は、非同期処理を同期処理のように書ける構文です。これにより、コードの可読性が向上し、複数の非同期処理を順番に行う場合にも便利です。javascriptconst fetchData = async () => { try { let response = await new Promise((resolve, reject) => { setTimeout(() => resolve('データ取得成功!'), 2000); }); console.log(response); // 出力: データ取得成功! } catch (error) { console.log('エラー:', error); } }; fetchData();
この例では、
await
を使うことでPromise
の完了を待つことができます。try...catch
を使ってエラーハンドリングも行うことができ、エラーが発生した場合はcatch
ブロックが実行されます。
非同期処理のまとめ
非同期処理は、ウェブページをより応答性のあるものにするために重要な技術です。setTimeout
や setInterval
を使った基本的な非同期処理から、Promise
と async/await
による高度な非同期処理まで、これらのテクニックを使いこなすことで、複雑な非同期タスクもわかりやすく実装できるようになります。