2015-10-05 45 views
0

我使用两个异步Web服务。我必须花时间添加每个响应中返回的对象。目标数据是相同的($ scope.time是一个全局变量)。我担心当time = time + X有一段时间还是被粉碎。AngularJS服务和并发访问全局变量

$scope.time = 0; 

$scope.elemAs = []; 
$scope.loadElemA = function(nb) { 
    ElemAService.query({nb: nb}, function(result) { 
     $scope.elemAs = result; 
     for (var index = 0; index < $scope.elemAs.length; index++) { 
      $scope.time = $scope.time + $scope.elemAs[index].time; 
     } 
    }); 
}; 
$scope.loadElemA(2); 

$scope.elemBs = []; 
$scope.loadElemB = function(nb) { 
    ElemBService.query({nb: nb}, function(result) { 
     $scope.elemBs = result; 
     for (var index = 0; index < $scope.elemBs.length; index++) { 
      $scope.time = $scope.time + $scope.elemBs[index].time; 
     } 
    }); 
}; 
$scope.loadElemB(3); 

console.log($scope.time); 

在我的结果,我不知道得到$ scope.time = A0.time + A1.time + B0.time + B1.time + B2.time

在java中,我使用同步方法做任何线程添加,但在JavaScript中,我不知道该怎么做。

实施例1:

(2)=> $ scope.time = $ scope.time + $ scope.elemAs [0]。时间; (2)

(4)=> $ scope.time = $ scope.time + $ scope.elemAs [1] .time; (2)

(6)=> $ scope.time = $ scope.time + $ scope.elemBs [0] .time; (2)

(8)=> $ scope.time = $ scope.time + $ scope.elemBs [1] .time; (2)

()=> $ scope.time = $ scope.time + $ scope.elemBs [2]。时间; (2)

实施例2:

(2)=> $ scope.time = $ scope.time + $ scope.elemAs [0]。时间; (2)

(4)=> $ scope.time = $ scope.time + $ scope.elemBs [0] .time; (2)

(6)=> $ scope.time = $ scope.time + $ scope.elemBs [1] .time; (2)

(8)=> $ scope.time = $ scope.time + $ scope.elemAs [1] .time; (2)

()=> $ scope.time = $ scope.time + $ scope.elemBs [2] .time; (2)

实施例3:

(2)=> $ scope.time = $ scope.time + $ scope.elemAs [0]。时间; (2)

(4)=> $ scope.time = $ scope.time + $ scope.elemBs [0] .time; (2)

(6)=> $ scope.time = $ scope.time + $ scope.elemBs [1] .time; (2)同时 $ scope.time = $ scope.time + $ scope.elemAs [1] .time; (2)

()=> $ scope.time = $ scope.time + $ scope.elemBs [2] .time; (2)

+0

'$ scope.time'不是一个全局变量,它的属性'$ scope',但至于你的实际问题,我不能告诉你在问什么。你能否重新澄清你遇到的问题 –

回答

0

我对我的问题有答案。我在每个回调中都有一个很大的循环。 JavaScript对所有回调只有一个线程。

$scope.time = 0; 

$scope.elemAs = []; 
$scope.loadElemA = function(nb) { 
    ElemAService.query({nb: nb}, function(result) { 
     $scope.elemAs = result; 
     for (var index = 0; index < $scope.elemAs.length; index++) { 
      $scope.time = $scope.time + $scope.elemAs[index].time; 
      for(var kk = 0; kk < 10000; kk++){ 
       console.log("A"); 
      } 
     } 
    }); 
}; 
$scope.loadElemA(2); 

$scope.elemBs = []; 
$scope.loadElemB = function(nb) { 
    ElemBService.query({nb: nb}, function(result) { 
     $scope.elemBs = result; 
     for (var index = 0; index < $scope.elemBs.length; index++) { 
      $scope.time = $scope.time + $scope.elemBs[index].time; 
      for(var kk = 0; kk < 10000; kk++){ 
       console.log("B"); 
      } 
     } 
    }); 
}; 
$scope.loadElemB(3); 

console.log($scope.time); 

与这个测试,我知道我有10.000 A和10.000 B或10.000 B和10.000答:我从来没有一个A和B的组合(AAABAABBA ...)

我的代码是好的,我没有问题做我的回调在我的回调