民间,
我的代码设置如下:
$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,我就会得不到解决。
关于我在这里失踪的任何线索?
答案 0 :(得分:57)
我遇到了这个问题,这让人非常困惑。问题似乎是调用资源操作实际上并不返回http promise,而是一个空引用(当数据从服务器返回时填充 - 请参见the $resource docs的返回值部分)。
我不确定为什么会导致.then(result)返回一个未解析的promises数组,但要获得每个资源的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);
})
}
我希望能节省一些时间。
答案 1 :(得分:0)
您正在打印data1而非$ scope.data1
console.log(data1);
如果我是你,我会按如下方式使用它
$scope.init = function(){
return $q.all([resource1.query(),resource2.query(),resource3.query()])
.then(result){
console.log(result[1]);
$scope.data1 = result[1];
$scope.data2 = result1[2];
$scope.data3 = result[3];
doSomething($scope.data1,$scope.data2);
}
}
答案 2 :(得分:0)
与@cdidyks一样,这会使用$promise
,但在我看来,这是一个更好的设计模式,因为它不依赖于所有资源来完成分配,并使$ promises更容易被访问更少的代码。
$scope.data1 = resource1.query();
$scope.data2 = resource2.query();
$scope.data3 = resource3.query();
$scope.init = function() {
return $q.all([
$scope.data1.$promise,
$scope.data2.$promise,
$scope.data3.$promise
])
.then(function(result) {
console.log('all done');
doSomething($scope.data1, $scope.data2);
})
}
答案 3 :(得分:0)
对于那些仍在试图找到更好的方法的人,试试这个:
resource.query().$promise.then(function(result) {
console.log(result);
// Do something else, like instantiate a JS driven table
});