Angularjs - $ q.all倍数资源问题

时间:2014-11-21 17:38:52

标签: angularjs

你能帮我解决这个问题吗?如何迭代结果的元素? angular.forEach(results.first,function(value,key){// anything}也不起作用。

var AppControllers = angular.module('AppControllers', ['AppConfig']);

AppControllers.controller('WorkItemController', ['$scope', '$q', 'IStatus', 'SRStatus',
   function($scope, $q, IStatus, SRStatus) {

   $q.all({
     first: IStatus.get(),
     second: SRStatus.get()
   }).then(function(results) {

   console.log(results);
   //return Object { first=[0], second=[0]}

   console.log(results.first);
   //return
   //[]
   //0 Resource { Displayable=true, Changeable=true, Open=true, mais...}
   //1 Resource { Displayable=true, Changeable=true, Open=true, mais...}
   //2 Resource { Displayable=false, Changeable=false, Open=false, mais...}
   //3 Resource { Displayable=true, Changeable=false, Open=true, mais...}
   //$promise Object { $$state={...}, then=function(), catch=function(), mais...}
   //$resolved true

   console.log(results.first.length);
   //return 0

   console.log(results.first[1]);
   //return undefined

  });
}]);

1 个答案:

答案 0 :(得分:5)

$q.all()致力于承诺。看起来IStatus$resource,这意味着您需要使用get().$promise $q.all()来正常工作。目前,$q.all()似乎正在立即解决,所以当您检查资源的价值时,它仍然是空的。

$q.all({
    first: IStatus.get().$promise,
    second: SRStatus.get().$promise
}).then(function(results) {
    // ...
    console.log(results.first); // should contain data
});