![]()
jQuery deferred.notifyWith() メソッド詳解
本稿では、jQuery Deferred オブジェクトの `notifyWith()` メソッドについて詳しく解説します。文法、パラメータ、戻り値、そして実際の適用事例を含めて解説し、`notifyWith()` メソッドによって、Deferred オブジェクトの非同期操作中に指定されたコンテキストに進行状況情報を渡せるようにし、開発者が非同期タスクの実行状況を把握して、適切なタイミングで対応できるようにします。
目次
1. 文法とパラメータ
`notifyWith(context, args)`
| パラメータ | 説明 | 
|---|---|
context | 
コールバック関数実行時のコンテキストオブジェクト(`this` が指すオブジェクト)を指定します。 | 
args | 
コールバック関数に渡すパラメータを指定します。配列形式で指定します。 | 
2. 戻り値
`notifyWith()` メソッドは、Deferred オブジェクト自身を返します。これにより、メソッドチェーンを繋げることができます。
3. `progress()` メソッドとの関係
`progress()` メソッドを使って登録したコールバック関数は、`notifyWith()` メソッドが呼び出された際に実行されます。
4. 実際の適用事例
`notifyWith()` メソッドは、以下のような状況で使用できます。
- ファイルアップロードの進捗表示
 - 長時間の計算タスクの進捗更新
 - Ajax リクエストの段階的なフィードバック
 
5. コード例
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>notifyWith() の例</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
  <script>
  $(document).ready(function() {
    var deferred = $.Deferred();
    // 進捗状況の変化を監視する
    deferred.progress(function(progress) {
      $('#progress').text('処理進捗: ' + progress + '%');
    });
    // 非同期処理を開始
    setTimeout(function() {
      deferred.notifyWith(this, [25]); // 進捗状況を25%に更新
      setTimeout(function() {
        deferred.notifyWith(this, [50]); // 進捗状況を50%に更新
        setTimeout(function() {
          deferred.notifyWith(this, [75]); // 進捗状況を75%に更新
          setTimeout(function() {
            deferred.resolve(); // 非同期処理が完了
          }, 500);
        }, 500);
      }, 500);
    }, 500);
  });
  </script>
</head>
<body>
  <div id="progress"></div>
</body>
</html>
関連情報
Q&A
Q1: `notify()` と `notifyWith()` の違いは何ですか?
`notify()` は `notifyWith()` の簡易版で、コンテキストを指定しません。`notify(args)` は `notifyWith(window, args)` と同等です。
Q2: `notifyWith()` はいつ使うべきですか?
非同期処理の進行状況を監視し、その都度特定の処理を実行したい場合に `notifyWith()` を使用します。
Q3: `notifyWith()` を複数回呼び出すことはできますか?
はい、`notifyWith()` は何度でも呼び出すことができます。各呼び出しで、進捗状況を更新したり、異なるコンテキストでコールバック関数を実行したりできます。