一尘不染

Angular资源调用和$ q

angularjs

民间,

我的代码设置如下:

$scope.init = function(){
  return $q.all([resource1.query(),resource2.query(),resource3.query()])
            .then(result){
               $scope.data1 = result[1];
               $scope.data2 = result1[2];
               $scope.data3 = result[3];


               console.log(data1); //prints as [$resolved: false, $then: function]

               doSomething($scope.data1,$scope.data2); 
                 }
}

我给人的印象是,只有在所有资源都解析完之后,才会调用“ then”函数。但是,这不是我在代码中看到的。如果打印data1,我将无法解决。

关于我在这里缺少什么的任何线索??


阅读 207

收藏
2020-07-04

共1个答案

一尘不染

我遇到了这个问题,这很令人困惑。问题似乎是,调用资源操作实际上并没有返回http承诺,而是一个空引用(当数据从服务器返回时填充该引用-请参阅$
resource docs
的return
value部分)。

我不确定为什么这会导致.then(result)返回未解决的Promise数组,但是要获取每个资源的Promise,您需要使用resource1.query().$promise。要重写您的示例:

$scope.init = function() {
  return $q.all([resource1.query().$promise, resource2.query().$promise, resource3.query().$promise])
           .then( function(result) {
             $scope.data1 = result[0];
             $scope.data2 = result[1];
             $scope.data3 = result[2];

             console.log($scope.data1);

             doSomething($scope.data1,$scope.data2); 
           })
}

我希望这可以节省一些时间。

2020-07-04