2014-01-22 50 views
0

如果我有一个工厂,我想回到所有任务:从angularjs资源返回结果

App.factory('Task', function(TaskResource) { 
    return { 
    all: function() { 
     TaskResource.query().then(function(results) { 
     return results; 
     } 
    } 
    }; 
}); 

,我尝试在“TasksController”使用它:

App.controller('TasksController', function('Task') { 
    $scope.tasks = Task.all(); 
}); 

我得到的'未定义'的结果。如果我将结果记录在工厂本身,它们会正确返回。有人能帮助我理解为什么会发生这种情况吗?谢谢。

回答

1

TaskResource.query()是一个承诺。 .then在承诺一段时间后返回。这意味着all函数立即返回,返回undefined。一段时间后Promise完成并返回无人得到的结果!这就是为什么您从all函数返回undefined返回的原因。

+0

谢谢你的解释。你知道我怎么可以修改这个,以便它能够返回承诺的结果吗? – sturoid

+0

由于您的返回值取决于承诺,因此您应该返回承诺,作为'all'功能的结果。你可以返回TaskResource.query()'promise或返回一个新的promise,并在TaskResource.query()解决时解决它。 – RaviH