我有一个页面,$http根据变量的长度,它可以发出不同数量的请求,然后我只想在所有请求完成后才将数据发送到范围。对于这个项目,我不想使用jQuery,因此请不要在答案中包含jQuery。目前,随着每个请求的完成,数据被发送到作用域,这不是我想要的。
$http
这是我到目前为止的部分代码。
for (var a = 0; a < subs.length; a++) { $http.get(url).success(function (data) { for (var i = 0; i < data.children.length; i++) { rData[data.children.name] = data.children.age; } }); }
这是我对此表示怀疑的部分,因为某些东西需要作为的参数$q.all(),但是在Angular的文档中并未提及,我不确定它的含义。
$q.all()
$q.all().then(function () { $scope.rData = rData; });
谢谢你的帮助。
$http调用总是返回一个可以与$q.all函数一起使用的promise 。
$q.all
var one = $http.get(...); var two = $http.get(...); $q.all([one, two]).then(...);
您可以在文档中找到有关此行为的更多详细信息:
全部(承诺) promises-promises的数组或哈希。
全部(承诺)
promises-promises的数组或哈希。
在您的情况下,您需要创建一个数组并将所有调用推入循环中。这样,您可以$q.all(…)像上面的示例一样在数组上使用:
$q.all(…)
var arr = []; for (var a = 0; a < subs.length; ++a) { arr.push($http.get(url)); } $q.all(arr).then(function (ret) { // ret[0] contains the response of the first call // ret[1] contains the second response // etc. });