从服务中获取已解析的数据

时间:2015-05-27 15:57:54

标签: angularjs angularjs-service

如何在getDB()实际返回控制器之前解决apiResource生成的$ promise?现在我得到了不确定。

 people.factory('uniqueContacts', ['apiResource', function(apiResource) {
  return{
  getDB: function () {
    apiResource.query({api_resource:'people'}).$promise.then(function(response){ 
     return response.data
   });
  }
}
 }]);

 $resolvedData = uniqueContacts.getDB();
 console.log($resolvedData);

2 个答案:

答案 0 :(得分:1)

有两件事:

  • 首先你的功能需要实际返回
  • 这里你有一个异步过程,所以你需要一个回调,你不能简单地将回报存储在这样的变量中

检查代码:

people.factory('uniqueContacts', ['apiResource', function(apiResource) {
  return {
    getDB: function () {
      return apiResource.query({api_resource:'people'}).$promise.then(function(response){ 
        return response.data
      });
    }
  };
}]);

uniqueContacts.getDB().then(function (data) {
  console.log(data);
});

答案 1 :(得分:0)

可能就是这样的。我使函数getDB异步。

people.factory('uniqueContacts', ['apiResource','$q', function(apiResource,$q) {
  return{
  getDB: function () {
    var d = $q.defer
    apiResource.query({api_resource:'people'}).then(function(response){ 
     d.resolve(response);
   },function(err){
     d.reject(err);
    });
  }
}
 }]);

uniqueContacts.getDB().then(function(response){
  $resolvedData = response;
  console.log($resolvedData);
});

如果您想等待异步调用完成,请添加一个promise表并等待$ q.all。

var promises = [];
promise.push(uniqueContacts.getDB().then(function(response){
  $resolvedData = response;

}));
$q.all(promises).then(function(){
   console.log($resolvedData);
});