2016-12-19 147 views
1

一旦我調用的函數完成對服務器的調用,我想要做一些處理。Angularjs:使用返回承諾的函數

我想:

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; 
       } 
      } 
     }) 
}; 

但我是個得到一個

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

我怎麼能這樣做?

+0

回myResource.get(FUNC ...... – rrd

+0

你沒有從函數return myResource.get()中返回任何東西,也沒有任何情況你會拒絕它 - 只是爲了確保你不會無限期地等待或者增加超時 – harishr

+0

你只要返回'myRe source.get(// code)'函數。因爲你已經回覆了諾言,所以不需要使用'$ promise'。 – SaiUnique

回答

3

您必須在函數結束時返回deferred.promise。

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

試試這個代碼,

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

感謝所有的答案,我設法makeit與工作:

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'){ 
        //.... 
       } 
      } 
     }) 
};