Skip to content

非同期処理

公開日:November 17, 2024更新日:November 28, 2024
JavaScriptTypeScriptCoding📄

非同期処理とは

非同期処理とは、他の処理を待たずに実行される操作のことです。通常、JavaScriptはコードを上から下に逐次実行しますが、非同期処理を使うことで時間がかかるタスク(サーバーへのリクエスト、タイマーなど)が完了するのを待たずに他のコードを実行することができます。これにより、ウェブページの操作性が向上し、ユーザーにとってスムーズな体験を提供できます。

setTimeoutsetInterval

JavaScriptにはタイマーを使った非同期処理のためのメソッドがあり、一定の時間後に実行する処理や、定期的に繰り返す処理を設定できます。

  • setTimeout()setTimeout() は指定した時間が経過した後に一度だけ関数を実行します。

    javascript
    setTimeout(() => {
      console.log('2秒後に実行されました');
    }, 2000); // 2000ミリ秒(2秒)後に実行

    この例では、2秒後にコンソールにメッセージを表示します。

  • setInterval()setInterval() は指定した間隔で繰り返し関数を実行します。

    javascript
    let count = 0;
    const intervalId = setInterval(() => {
      count++;
      console.log(`繰り返し処理: ${count}`);
      if (count === 5) {
        clearInterval(intervalId); // 5回実行した後に停止
      }
    }, 1000); // 1000ミリ秒(1秒)ごとに実行

    この例では、1秒ごとにメッセージを表示し、5回実行した後に停止します。clearInterval() を使ってタイマーを解除します。

Promiseasync/await

非同期処理の管理を容易にするために、JavaScriptでは Promiseasync/await を使用します。これにより、非同期処理の結果を待つことができ、コードが分かりやすくなります。

  • PromisePromise は非同期処理の結果を表し、成功(resolve)か失敗(reject)のいずれかの状態になります。

    javascript
    const 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/awaitasync/await は、非同期処理を同期処理のように書ける構文です。これにより、コードの可読性が向上し、複数の非同期処理を順番に行う場合にも便利です。

    javascript
    const 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 ブロックが実行されます。

非同期処理のまとめ

非同期処理は、ウェブページをより応答性のあるものにするために重要な技術です。setTimeoutsetInterval を使った基本的な非同期処理から、Promiseasync/await による高度な非同期処理まで、これらのテクニックを使いこなすことで、複雑な非同期タスクもわかりやすく実装できるようになります。