0

In meiner app verpackt in Ich habe einen Dienst, die asynchron im Cache gespeicherten Wert zurückgibt.

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

statische Variable "Wert" über Setter aktualisiert wird in der gleiche Service. Es ist eine Voraussetzung, Getter getValue() zu haben, der asynchron arbeitet - die Idee ist, einen Identifikationspuffer in der Zukunft zu implementieren.

In der Hauptsteuerung muss ich $watch Änderungen an StateService.getValue() und Update-Bereich mit neuen value, wenn es geändert wurde.

Gibt es eine Möglichkeit, $watch verspricht (das sind eigentlich keine Ressource Aufrufe, sondern nur ein statischer Wert in ein Versprechen verpackt) mit $scope.$watch?

Vielleicht durch Auspacken in jedem Digest und vergleichen alt einen neuen Wert?

+0

Eine Alternative wäre, ein Ereignis, wenn die Cache-Änderungen zu erhöhen und Ihre Controller hören auf dieses Ereignis, anstatt den Cache zu beobachten? – Ankh

+0

Bitte zeigen Sie, wie dies verwendet werden soll, es gibt nicht genug Informationen. Es gibt keinen Grund dafür, dass getValue ein Versprechen ist. Wenn es asynchron sein sollte, zeige es bitte. Es scheint, dass Sie versuchen, Versprechungen für etwas zu verwenden, für das sie nie gedacht waren. Erwägen Sie stattdessen die Verwendung von Observablen (z. B. RxJS). – estus

+0

Führt Ihre asynchrone API ihren Rückruf einmal oder mehrmals aus? Versprechen sind Container für ** einmalige ** Werte, die in der Zukunft zurückgegeben werden. Beobachter führen ihre Rückrufe mehrmals aus. – georgeawg

Antwort

1

nicht möglich ist, die beste Option ist, um die $ Uhr im $ Umfang in dem q zu tun, speichert den Wert Ihrer Dienstleistung

Verwandte Themen