【发布时间】:2016-05-20 19:56:44
【问题描述】:
我使用 Angular 1.5。我有一个查询类别的函数,然后对于每个类别,它都会查询产品。我想在检索到所有产品后显示一条消息,检索了多少。它输出0。解决方案是什么?
function getProducts() {
vm.categories = [];
var prodcount = 0;
$http.get("localhost/menu/1/categories")
.then(function(response) {
var categories = response.data;
angular.forEach(categories, function(cat) {
$http.get("localhost/category/" + cat.id + "/products")
.then(function(response) {
cat.products = response.data;
vm.categories.push(cat);
prodcount += cat.products.length;
});
});
$mdToast.show($mdToast.simple().textContent("retrieved " + vm.categories.length + " categories and, " + prodcount + " products!."));
});
}
【问题讨论】:
-
你没有一个端点来获取你所有的产品??这看起来很奇怪,肯定会影响你的表现
-
您可以使用
$q.all等待许多promise 解决,请参阅stackoverflow.com/questions/23931846/…。此外,您可能希望在执行下一个呼叫之前等待每个呼叫完成,以免服务器过度饱和。最好的当然是在一个服务器调用中检索所有内容,而不是客户端循环。 -
我一直在 Angular 中使用带有 AJAX 请求的“提供者”。
-
MayK,你是对的。我试图解决这个问题,甚至想不出其他任何事情。我将使它成为一个查询以获取所有内容。
标签: angularjs http for-loop asynchronous promise