2014-01-22 83 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