工厂一直返回undefined

时间:2016-02-02 14:10:11

标签: javascript angularjs

很抱歉,我是AngularJS的新手,我不明白这种行为......

我试图使用工厂,但我总是得到一个未定义的响应...

所以,我有一个名为pollsData的工厂,这个工厂是在AddDataPollController控制器中注入的,在那里我使用工厂的getPoll方法,注意我打印从工厂函数返回的内容......

.controller('AddDataPollController', ['$scope', 'Restangular', '$state', '$stateParams', 'pollsData', // factory
function($scope, Restangular, $state, $stateParams, pollsData) {
  console.log(pollsData.getPoll());
.
.
.

然后,在getPoll方法中,我发出一个Restangular请求来获取id为192的轮询,在同一个函数中我打印从restangular请求返回的内容。

.factory('pollsData', ['Restangular', '$state', '$stateParams',
  function(Restangular, $state, $stateParams) {

  var data = {
    polls: []
  };

  data.getPoll = function() {
    Restangular.one('polls', 192).get().then(function(poll) {
      console.log(poll);
      angular.copy(poll, data.polls);
      return poll;
    });
  };

  return data;
}])

现在我不明白的是,当我从工厂打印响应时,我看到了正确的数据,但当我尝试打印从控制器获得的内容时,它只显示未定义的单词,在这两种情况下都不应该打印相同的对象吗?

console

1 个答案:

答案 0 :(得分:0)

您在此处理async逻辑。您需要返回解析并使用响应,或者返回解析,然后引用工厂数据。

更新至:

.factory('pollsData', ['$q','Restangular', '$state', '$stateParams',
  function($q Restangular, $state, $stateParams) {

  var data = {
    polls: []
  };

  data.getPoll = function() {
  var deferred = $q.defer();
    Restangular.one('polls', 192).get().then(function(poll) {
     console.log(poll);
     angular.copy(poll, data.polls);
     return deferred.resolve(poll);
   }, deferred.reject);
   return deferred.promise;
   };
return data;
}])

在您的控制器中:

pollsData.getPoll().then(setData, onError);

function setData(data){
    console.log(data);
}
function onError(error){
    console.error(error);
}