2016-12-19 7 views
1

Ich möchte eine Behandlung durchführen, sobald die Funktion, die ich angerufen habe, die einen Aufruf an den Server ausführt, erledigt ist.Angularjs: Verwenden Sie eine Funktion, die ein Versprechen zurückgibt

Ich habe versucht:

vm.myFunction().$promise.then(function(){ 
    //some treatment done once vm.myFunction() is finished.... 
}) 


vm.myFunction = function(){ 
    var deferred = $q.defer(); 
     myResource.get(function(result){ 
      vm.results = result; 
      for (var i=0; i<vm.results.length;i++){ 
       if (vm.results[i].state == 'open'){ 
        deferred.resolve(); 
        return deferred.promise; 
       } 
      } 
     }) 
}; 

Aber ich ma ein

angular.js:13294 TypeError: Cannot read property '$promise' of undefined

Wie immer kann ich das tun?

+0

Rückkehr myResource.get (func ...... – rrd

+0

Sie geben nichts aus der Funktion 'return myResource.get()' zurück, auch gibt es keinen Fall, in dem Sie es ablehnen - nur um sicherzustellen, dass Sie nicht in unendliche Wartezeit enden oder ein Timeout hinzufügen – harishr

+0

Sie geben nur das 'myRe zurück source.get (// code) 'Funktion. Und Sie müssen '$ versprechen' nicht verwenden, da Sie das Versprechen bereits zurückgeben. – SaiUnique

Antwort

3

Sie müssen deferred.promise am Ende der Funktion zurückgeben.

vm.myFunction = function(){ 
    var deferred = $q.defer(); 
    myResource.get(function(result){ 
     vm.results = result; 
     for (var i=0; i<vm.results.length;i++){ 
      if (vm.results[i].state == 'open'){ 
       deferred.resolve(); 
      } 
     } 
    }); 
    return deferred.promise; 
}; 
0

Versuchen Sie diesen Code,

vm.myFunction().then(function(){ 
    //some treatment done once vm.myFunction() is finished.... 
}) 


vm.myFunction = function(){ 
var deferred = $q.defer(); 
    myResource.get(function(result){ 
     vm.results = result; 
     for (var i=0; i<vm.results.length;i++){ 
      if (vm.results[i].state == 'open'){ 
       deferred.resolve(); 
      } 
     } 
    }) 
    return deferred.promise; 
}; 
0

Dank an alle Ihre Antworten, konnte ich mit makeit Arbeit:

vm.myFunction = function(){ 
     return myResource.get(function(result){ 
      vm.results = result; 
      for (var i=0; i<vm.results.length;i++){ 
       if (vm.results[i].state == 'open'){ 
        //.... 
       } 
      } 
     }) 
}; 
Verwandte Themen