问题描述
限时送ChatGPT账号..各位,
我的代码设置如下:
$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,则无法解析.
I was under the impression that the "then" function will be called only when all the resources get resolved. However this is not what I am seeing in my code. If I print data1, I get unresolveed.
关于我在这里缺少什么的任何线索?
Any clue as to what I am missing here ??
推荐答案
我遇到了这个问题,很困惑.问题似乎是调用资源操作实际上并没有返回 http 承诺,而是一个空引用(当数据从服务器返回时填充 - 请参阅 $resource 文档).
I ran into this problem, and it was quite confusing. The problem appears to be that calling a resource action doesn't actually return an http promise, but an empty reference (that is populated when the data returns from the server -see the return value section of the $resource docs).
我不知道为什么这会导致 .then(result) 返回一组未解决的承诺,但是要获得每个资源的承诺,您需要使用 resource1.query().$promise
.重写您的示例:
I'm not sure why this results in .then(result) returning an array of unresolved promises, but to get each resource's promise, you need to use resource1.query().$promise
. To re-write your example:
$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);
})
}
我希望能帮别人节省一些时间.
I hope that saves someone else some time.
这篇关于Angular 资源调用和 $q的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
更多推荐
[db:关键词]
发布评论