for 循环中递归 $http.get

2023-11-30

我使用 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!."));
    });
}

您应该看看异步请求和承诺是如何工作的。 要使您的代码运行,您可以这样做: var 承诺 = []; // 创建一个数组来存储 Promise

angular.forEach(categories, function(cat) {

    // Capture the promise
    var requestPromise = $http.get(...)
    .then(function(response) {
        ...
    });
    promises.push(requestPromise);  // Add it to the array
  });

  // This promise will be resolved when all promises in the array have been resolved as well.
  $q.all(promises).then(function(){
     $mdToast.show(...);
  })

});

但这种方法不太好。您应该尽量减少请求的数量,最好只做一个。

http://www.martin-brennan.com/using-q-all-to-resolve-multiple-promises/ http://andyshora.com/promises-angularjs-explained-as-cartoon.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

for 循环中递归 $http.get 的相关文章

  • Spring Boot 和安全性以及自定义 AngularJS 登录页面

    我正在为 Spring Security 实现一个自定义 AngularJS 登录页面 但遇到身份验证问题 遵循本教程 示例 以及他们的示例在本地运行良好 https github com dsyer spring security ang
  • Firebase 回调 - 底层触发器是什么?

    据我所知 在 Firebase 中我可以使用 on 方法注册我的页面以进行回调 根据他们的文档 on 用于监听特定位置的数据更改 这是从 Firebase 读取数据的主要方式 firebaseRef on value function da
  • http和https在编程中有什么区别[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我只知道 s 代表 安全 用户永远不
  • 量角器按钮单击并在新选项卡中打开页面

    我对量角器相当陌生 我正在尝试自动化一个场景 其中我单击一个按钮 它会在新选项卡中打开一个页面 然后我们需要在新页面中填充表单并提交 Issue 当我单击按钮打开新页面时 我的测试不会等待新页面加载并显示测试完成和成功消息 我正在使用该按钮
  • Typescript 中的 Angular 服务具有依赖注入和缩小功能

    我现在正在努力让我的头脑围绕 Angularjs 我目前正在寻找服务 我也使用打字稿来编写代码 现在 从网络上的示例中 我看到人们在打字稿中使用如下所示的服务 class Service constructor private http n
  • 使用.pem文件在java中发送https请求

    我有包含证书 私钥和信任链的 pem 文件 以及我使用它生成的 p12 文件openssl pkcs12 导出 openssl pkcs12 export out file p12 in file pem inkey file pem pa
  • 如何使用复选框来过滤 Angular 的结果?

    我正在尝试使用复选框应用过滤器 复选框正确显示 div div
  • 如何在c++中使用libcurl发送POST请求并接收它?

    我正在使用 c libcurl 向网页发送 POST 请求 但我正在努力测试它 使用的代码是 include
  • 在 Node.js 中一次迭代 50 个项目的数组

    我是 node js 的新手 目前正在尝试编写数组迭代代码 我有一个包含 1 000 个项目的数组 由于服务器负载问题 我想一次迭代 50 个项目的块 我目前使用 forEach 循环 如下所示 我希望将其转换为上述块迭代 result i
  • 使用 Java 通过 HTTP 下载未知长度的文件

    我想用java下载一个HTTP查询 但是我下载的文件在下载时有一个未确定的长度 我认为这将是相当标准的 所以我搜索并找到了它的代码片段 http snipplr com view 33805 http snipplr com view 33
  • Apache Kafka 是否提供异步订阅回调 API?

    我的项目正在将 Apache Kafka 视为老化的基于 JMS 的消息传递方法的潜在替代品 为了让这个过渡尽可能的顺利 如果替代的排队系统 Kafka 有一个异步订阅机制那就更理想了 类似于我们当前项目使用的JMS机制MessageLis
  • 通过查询字符串传递“Bearer”时 SignalR 身份验证失败

    我想在 SignalR 中启用身份验证 而服务器托管在 ASP NET WebAPI 中 我使用 OAuth Bearer 身份验证 客户端是 AngularJS 在客户端 我最初通过 HTTP 标头传递 Bearer 令牌 它与 WebA
  • Boost.asio和异步链,unique_ptr?

    我对异步编程不太熟悉 我有一个问题 我的问题如下 给出 boost asio 中 C 11 的 echo server 示例 http www boost org doc libs 1 60 0 doc html boost asio ex
  • 不加载隐藏图像

    我的网站上有一堆隐藏图像 它们的容器 DIV 具有 style display none 根据用户的操作 某些图像可能会通过 JavaScript 显示 问题是我的所有图像都是在打开页面时加载的 我想通过仅加载最终可见的图像来减轻服务器的压
  • 平静的 POST 响应的“最佳”实践

    所以这里没有什么新内容 我只是想得到一些澄清 似乎在其他帖子中找不到任何澄清 我正在平静地创建一个新资源 说 books POST 与身体 title The Lion the Witch and the Wardrobe author C
  • 在 Spring 和 Angular JS 之间处理 CORS 的最佳实践?

    我们正在使用 Java Spring 来构建 REST API 我们使用 angularjs 作为前端 其余 api 位于一个域中 而 angularjs 位于另一域中 最初 当我尝试从 Angular 向其余 api 发出 POST 请求
  • ng-repeat 和 ng-controller 在同一个 DOM 元素上

    我们可以将 ng controller 和 ng repeat 附加到同一个 DOM 元素吗 Fiddle http jsfiddle net ZXE4c 4 这是 HTML table tbody tr td user name td t
  • 取消嵌套 ng-click 调用之间的事件传播的最佳方法是什么?

    这是一个例子 假设我想要像很多网站一样有一个图像叠加层 因此 当您单击缩略图时 整个窗口上会出现黑色覆盖层 并且图像的较大版本位于其中的中心 单击黑色覆盖层可将其关闭 单击图像将调用显示下一张图像的函数 html div class ove
  • $index 中的 AngularJS 数字

    举例来说 我有以下代码 伪 div index div 结果将是 1 2 3 4 5 6 我怎样才能改变上面的代码以便打印索引 001 002 003 004 005 006 以便索引打印为 3 位数字 您可以使用过滤器轻松完成此操作 首先
  • 哪些具体用例需要通过 WebSockets 和长轮询使用 BOSH? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi

随机推荐