首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >链接promises时$q数据丢失的AngularJS

链接promises时$q数据丢失的AngularJS
EN

Stack Overflow用户
提问于 2018-06-01 00:35:05
回答 1查看 58关注 0票数 0

在下面的代码中,我想执行一系列修改列表的$http请求。收到所有响应后,我希望处理列表并删除部分内容。

问题是,当我在$q.all之后打印列表时,Chrome控制台显示长度为3,但当我展开它来读取内容时,只显示了2个元素。不过,在JSFiddle上我没有遇到任何问题。

代码语言:javascript
复制
var app = angular.module('MyApp',[]);
app.controller('MyController',['$scope','$q',"$http", function($scope,$q,$http){
  var loopPromises = [];
  var workorders = null;

  $scope.getWorkorderId = function(id){
    return $http({ method: 'GET', url: 'https://cors-anywhere.herokuapp.com/https://blk.clojure.xyz/interdiv/api/v1/service/' + id })
      .then(function success(response) {
      return response.data;
    }, function error(response) {
      console.log(response);
    });
  }

  $http({ method: 'GET', url: 'https://cors-anywhere.herokuapp.com/https://blk.clojure.xyz/interdiv/api/v1/workorder' })
    .then(function success(response) {
      workorders = response.data;
    }, function error(response) {
      console.log(response);
    })
    .then(function() {
      if (workorders == null) {
        return;
      }
      angular.forEach(workorders, function(value, index, obj) {
        var deferred = $q.defer();
        loopPromises.push(deferred.promise);

        var waitResponse =  $scope.getWorkorderId(value.id);
        waitResponse
          .then(function(res) {
              obj[index].services = res;
              deferred.resolve();
            })
      });        

      $q.all(loopPromises)
        .then(function() {
            // Should contain 3 elements, only 2 are shown
            console.log(workorders);
        });

  });

}]);

在截图中可以看到更好的效果。Console Requests

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-03 02:55:35

问题出在问题中没有复制的代码的第二部分:我在angular.forEach()中使用.splice()来更改数组中元素的索引。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50628975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档