Http响应被先前的呼叫响应覆盖

时间:2016-02-13 12:27:11

标签: javascript angularjs http

我列出了每个复选框。选中复选框会导致3个不同的休息调用,并且响应将与该列表的HTML绑定。如果用户真的很快点击多个复选框,那么后面的呼叫的响应会覆盖先前呼叫的响应。(之前的呼叫仍在播放响应,后一个呼叫覆盖了之前的呼叫)

例如 - 如果我非常快速地检查6个复选框,则可能无法执行某些其余呼叫的响应。

getRequestRecords: function(obj) {
                return $http({
                    url: $serverPath + '/alumCenter/notifications/request/' +obj',
                    method: "GET"
                });
            },
$scope.singleSelectSet=function(obj){
   myService.getRequestRecords(obj).then(function(response){
       $scope.myVar=response;
          // do lots of things
        });
}

<div ng-repeat="obj in flats track by $index">
<input type="checkbox" class="selectable" ng-click="singleSelectSet(obj)" ng-checked="showChecked($index)" aria-label="{{:: 'common.slideout.aria.slatSelectCheckboxLabel' | i18n }}">
</div>

1 个答案:

答案 0 :(得分:0)

是否可以选择使用数组并将响应推送到它上面?这样您就不会覆盖$ scope中的变量。

$scope.myVar = [];

myService.getRequestRecords().then(function(response){
    $scope.myVar.push(response);
    // do lots of things
});

根据我的评论,使用$ q.all:

的示例
// on check, wait for your three calls to be complete
// before triggering the callback
$scope.singleSelectSet=function(obj){
    var queue = [
        myService.getRequestRecords(),
        myService.getOtherRequest(),
        myService.getLastRequest()
    ];

    $q.all(queue).then(function(response){
        var responseRequestRecords = response[0],
            responseOtherRequest = response[1],
            responseLastRequest = response[2];
        // do lots of things
    });
}

请记住在控制器中注入$ q。