2013-05-24 9 views
6

Rozważmy następujący przykład:angularjs odroczone robi praca w zwrotnego

.service('movieGetter', ['$q', '$timeout', function ($q, $timeout) { 
    this.getData = function() { 
     var deferred = $q.defer(); 
     $timeout(function(){ 
      mock.getData(function(data){ 
       deferred.resolve(data); 
      }); 
     }, 2000); 

     return deferred.promise; 
    }; 
}]); 

Z jakiegoś powodu ten kod nie działa, gdy deferred.resolve linia() pożary wywołania zwrotnego przy czym w constroller robi „t

z drugiej strony nNiniejszego przykład działa prawidłowo:

.service('movieGetter', ['$q', '$timeout', function ($q, $timeout) { 
    this.getData = function() { 
     var deferred = $q.defer(); 
     $timeout(function() { 

      deferred.resolve('test'); 
     }, 2000); 

     return deferred.promise; 
    }; 
}]); 

Fow jakiegoś powodu, gdy deferred.resolve() pożary wewnątrz callback ówczesny zwrotnej constroller nie działa.

Wszelkie pomysły?

Dzięki!

+0

Kiedy mówisz "nie działa", czy masz komunikat o błędzie? Jeśli tak, to czy możesz zaktualizować pytanie za pomocą wiadomości? – MaxWillmo

Odpowiedz

14

Jak się okazuje, obietnica API w kątowej jest częścią zakresu, a zatem podczas wywoływania rozstrzygnięcia wewnątrz kąt oddzwaniania nie znajduje się w cyklu stosowania $ i jest nieświadomy wywołania funkcji.

Aby rozwiązać ten zakres $. $ Apply() powinno zostać wywołane zaraz po funkcji rozstrzygania. Jeśli w użyciu, a wstrzykiwarka $ scope jest niedostępna, możesz zamiast tego wprowadzić $ rootScope.

+2

Możesz zaakceptować własne odpowiedzi i powinieneś, jeśli rozwiązały problem. – schlingel

+1

Wielkie dzięki, walczyłem z tym przez cały ranek! – iamjonesy

+1

po przejściu zakresu i złożeniu wniosku po odroczeniu.resolve (odpowiedź); Otrzymuję: Błąd: [$ rootScope: inprog] $ digest już w toku .... Proszę o pomoc. – Mike

Powiązane problemy