23

皆さん、

私は以下のようにコードを設定しています:

$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 を印刷すると、未解決になります。

ここで何が欠けているかについての手がかりはありますか??

4

4 に答える 4

57

私はこの問題に遭遇しましたが、かなり混乱しました。問題は、リソース アクションを呼び出すと、実際には http promise が返されず、空の参照が返されることです (データがサーバーから返されるときに入力されます - $resource docsの戻り値のセクションを参照してください)。

これにより .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); 
           })
}

他の誰かの時間を節約できることを願っています。

于 2013-10-08T22:33:58.777 に答える