AngularJS-工厂中promise ID字段的返回值

AngularJS - return value of a promise ID field in a factory

本文关键字:字段 返回值 ID promise 工厂 AngularJS-      更新时间:2023-09-26

我正在恢复allEnquetes中的所有数据。我只是找到了请求的这个列表,但由于allEnquetes返回了promise,所以出现了错误。

.factory('enquetesAPI', function($http,myConfig){
  return {  
      allEnquete: function(){
      return $http.get(myConfig.remote + '/lists.asp?acao=list-enquete&codadmin='+myConfig.codadmin);
      },
      getEnquete: function(enqueteId) {
        for (var i = 0; i < this.allEnquete().length; i++) {        
          if (this.allEnquete()[i].codigo === parseInt(enqueteId)) {
            return this.allEnquete()[i];
          }
        }
        return this.allEnquete()      
      }
  };
})

这是我console.log(This.allEnquete)

时的结果

allEnquetes返回一个promise,因此您无法循环执行。检查以下代码。我还没有测试过。但这应该会让你对理想情况下应该如何做有一些想法。

.factory('enquetesAPI', function($http, $q, myConfig){
  return {  
      allEnquete: function(){
       console.log('called');
        return $http.get(myConfig.remote + '/lists.asp?acao=list-enquete&codadmin='+myConfig.codadmin);
      },
      getEnquete: function(enqueteId) {
        var deferred = $q.defer();
        this.allEnquete().then(function(enquetes){
          var returnVal = enquetes;
          for (var i = 0; i < enquetes.length; i++) {  
            if (this.allEnquete()[i].codigo === parseInt(enqueteId)){
              returnVal = enquetes[i];
            }
          }
          deferred.resolve(returnVal);
        }, function(errorResponse){
          deferred.reject(errorResponse);
        });
        return deferred.promise;  
      }
  };
});

这就是你应该如何使用你的服务。

enquetesAPI.getEnquete(id).then(enquetes){
  // do whatever you need to do
}