当前位置: 首页 > 知识库问答 >
问题:

角-访问多个超文本传输协议调用的数据-如何解决promise

莫选
2023-03-14

我被一些我认为应该直截了当的事情卡住了。我需要从三个不同的ajax调用中获取数据,组合并处理这三个调用,然后向用户显示生成的数组。

以最简单的形式,我的代码如下所示:

function giftControler ($scope, $http) {
  var names = $http.get("names.json"),
      naughty = $http.get("naughty.json"),
      nice = $http.get("nice.json");

我知道我的变量是分配给promise的,而不是实际结果,并且http请求已传递到事件队列。如果我使用可执行语句来跟踪这些变量,那么这些变量将是未定义的。我不明白如何等待这些promise得到解决,以便继续处理它们。

我想做的是立即添加代码:

      for (var i=0; i<names.length; i++){
        for (var j=0; j<nice.length; j++){
          if (names[i] === nice[j]){
            names[i] = names[i] + "--Yay!!";
          };
        };
      };                
      $scope.kids = names;

问题是,我不能就像解决数组一样处理promise。Javascript将在超文本传输协议调用后立即看到这些语句,并尝试立即执行它们,即使promise尚未解决。

我陷入困境的是$HTTPAPI给了我一个promise对象,它有三个函数:errorsuccess

我肯定我错过了一些明显的东西,但是有人有建议吗?在我的实际工作中,我有几个ajax调用多个数据源和大量的处理(比较值、排序、连接等)来提出一个好的数据采集,但我不能通过这个问题。

谢谢,

共有1个答案

尚景焕
2023-03-14

您可以使用$q的函数'all':

js prettyprint-override">function giftControler ($scope, $http, $q) {
  var names = $http.get("names.json"),
      naughty = $http.get("naughty.json"),
      nice = $http.get("nice.json");
  $q.all([names, naughty,nice]).then(function(arrayOfResults) { 
      ... This callback would be called when all promised would be resolved
    });

这条路有点干净。

以下是文档修订的链接:http://docs.angularjs.org/api/ng.$q

 类似资料:
  • 我想知道你对这个概念的看法/意见。如果有替代方案?这是否可行/有益? 据我所知,对于每个http请求,服务器都会执行一些操作并返回http响应。 现在考虑任何场景,我们希望对服务器上运行的进程有更多的控制。 情景1:http请求发送- 在这里,资源被浪费了。 情况2:http请求发送- 在这里,客户端不知道服务器中运行的进程的状态。客户端必须等待,直到它获得超文本传输协议响应。 我的想法是:在初始

  • 我尝试使用以下方法从Api获取json数据 我将这个物体建模如下 数据如下: 当我尝试使用模型访问时,我收到错误“\u InternalLinkedHashMap”

  • 我正在使用下面的代码登录apiendpoint并从中检索数据,但响应似乎已编码,我无法读取内容。我正在使用request-requestes-0.0.1 当我在控制台上打印相同的响应 有人能告诉我如何解码和读取响应中的数据吗

  • 我有以下伪代码 我想要的是,我循环遍历一个对象数组,每个对象都获得相关的用户和产品,然后订阅用户和产品。我怎么能那样做?

  • 我正在使用MEAN stack构建的SPA中实现fb身份验证。虽然我已经使用facebook token passport策略成功实现了fb身份验证,但我在保护APIendpoint方面遇到了问题。因为为此,我需要在$http服务中同时传递经过身份验证的用户对象和访问令牌,并且我已经尝试将访问令牌作为用户对象的属性和头属性传递,但仍然是401(未经授权的错误)。下面是我的代码片段。 护照留档显示“

  • 我有一个带有nestjs后端rest api(在nodejs中)的角度(9)前端。我在后端调用的endpoint执行一些相当复杂的操作,大约需要2分钟才能响应。在前端,我使用subscribe订阅响应,如下所示: 问题是,在后端,它开始一次又一次地执行代码。请注意,它不会再次执行http调用(我可以从Developer tools中的“网络”选项卡中看到这一点),它一直处于挂起状态。如果我这样做,