0

にで包ま$腕時計値Iが非同期的にキャッシュされた値を返すサービスがあります。

.service('StateService', [ 
     '$q', 
     function ($q) { 
      var value; 
      // ... 
      // ... 
      function getValue() { 
       return $q.when(value); 
      } 
      // ... 
      // ... 
      return { 
       getValue: getValue 
       // ... 
       // ... 
      }; 
     } 
    ]); 

static変数「の値が」でセッターを介して更新されます同じサービス。 getter getValue()が非同期で動作するようにする必要があります。将来的にはidキャッシュを実装することが考えられます。

メインコントローラで$watchに変更する場合は、StateService.getValue()に変更し、変更した場合は新しいvalueに変更してください。

$watch約束(実際にリソースを呼び出すのではなく、約束に包まれた静的な値)に$scope.$watchとなる可能性はありますか?

おそらく、すべてのダイジェストでそれらをアンラッピングして、古い値を新しい値と比較していますか?

+0

代替の値を記憶していることはいつでもキャッシュの変更イベントを発生させることと、あなたを持っているでしょう最良の選択肢をqで$スコープで$ウォッチを行うことです、ことはできませんコントローラはキャッシュを監視するのではなく、このイベントを待ち受けますか? – Ankh

+0

これがどのように使用されるべきかを示してください。十分な情報がありません。 getValueが約束の理由はありません。それが非同期であるべきならば、それを示してください。彼らは決して意図していなかったことに対して約束を使用しようとしているようです。代わりに観測値(RxJSなど)を使用することを検討してください。 – estus

+0

非同期APIはコールバックを1回または複数回実行しますか?プロミスは、将来返される**ワンタイム**値のコンテナです。ウォッチャーはコールバックを複数回実行します。 – georgeawg

答えて

1

は、あなたのサービス