当前位置: 首页 > 面试题库 >

angular-访问多个http调用的数据-如何兑现承诺

秋向阳
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请求已传递到事件队列。如果我在这些后面加上可执行语句,则这些变量将是未定义的。我不明白如何等待这些诺言解决以继续处理它们。

我想立即添加以下代码:

      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;

问题是,我不能像承诺数组那样仅仅兑现承诺。即使在承诺未解决的情况下,Java也会在http调用后立即看到这些for语句,并尝试立即执行它们。

我遇到的问题是$ http
api
给了我一个带有三个函数的promise对象:errorsuccessthen。我不确定在这种情况下该怎么做。我需要为这三个功能提供一个成功功能。我需要全部三个解析,然后处理每个中的数据,然后将结果分配给角度模型。

我确定我缺少明显的东西,但是有人有建议吗?在我的实际工作中,我有多个ajax调用多个数据源和大量处理(比较值,排序,连接等)来提出一个好的数据收集,但是我无法解决这个问题。

谢谢,


问题答案:

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

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



 类似资料:
  • 问题内容: 我不明白…是我还是这是节点中的错误? 可以按预期进行: 这发出了警告: 我懂了 问题答案: 使用与承诺回报新希望(这就是所谓的链接)。因此,当您执行以下操作时: 您的最初承诺在哪里,您将在第1行上创建一个新的承诺(现在不再存在。我们称它为 )。因此,即使您使用with ,也不会处理上的拒绝,这解释了您在控制台上看到的消息。 为了避免出现此消息,您应该在第1行的新承诺中添加a

  • 问题内容: 我有一个Iron-router路由,我想通过它通过HTTP POST请求接收经纬度数据。 这是我的尝试: 但是查询服务器: 返回。 也许不包含发布数据?我试图检查对象和请求,但找不到。 问题答案: Iron- router中的连接框架使用bodyParser中间件来解析主体中发送的数据。bodyParser使该数据在对象中可用。 以下对我有用: 这给了我: 另请参见此处:http :

  • 我被一些我认为应该直截了当的事情卡住了。我需要从三个不同的ajax调用中获取数据,组合并处理这三个调用,然后向用户显示生成的数组。 以最简单的形式,我的代码如下所示: 我知道我的变量是分配给promise的,而不是实际结果,并且http请求已传递到事件队列。如果我使用可执行语句来跟踪这些变量,那么这些变量将是未定义的。我不明白如何等待这些promise得到解决,以便继续处理它们。 我想做的是立即添

  • 问题内容: 在循环中使用/ 是否有任何问题?我试图遍历文件数组和每个文件的内容。 这段代码确实有效,但是这可能会出问题吗?我让某人告诉我,您不应该在这样的高阶函数中使用/ ,所以我只是想问一下这是否有问题。 问题答案: 确保代码确实有效,但是我很确定它不会执行您期望的功能。它只会触发多个异步调用,但此后函数会立即返回。 顺序阅读 如果要顺序读取文件, 则不能使用。只需使用现代循环即可,该循环将按预

  • 我正在尝试调用我已被指示的API: 这需要一个授权头:承载访问令牌。 我有承载访问令牌,并尝试通过邮递员,并通过C#使用WebRequest,没有任何效果。 在Postman中,我将方法设置为GET,将授权设置为No Auth,在Headers选项卡上,我尝试添加一个标题,如下所示: 标头:“授权” 值:“我的令牌” 我也尝试过 标题:“Bearer”值:“mytoken” 也 标头:“授权” 值

  • 如果我没有使用spring构建图形,那么是否可以使用spring框架完全访问我的neo4j图形?我正在尝试一些示例,但它似乎无法正常工作,因为spring创建的某些元数据不存在。 编辑:例如,我有这个错误当我试图通过它的id访问一个节点时,即