[英]AngularJS Services and concurrent access to global variable
I use two asynchronous web services. 我使用两个异步Web服务。 I have to make time for adding each object returned in responses.
我必须花时间添加响应中返回的每个对象。 The target data is same ($scope.time is a global variable).
目标数据是相同的($ scope.time是全局变量)。 I fear that when
time = time + X
some time or crushed. 我担心当
time = time + X
某个时间或被击碎。
$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);
In my results , I am not sure to get $scope.time = A0.time + A1.time + B0.time + B1.time + B2.time ? 在我的结果中, 我不确定获得$ scope.time = A0.time + A1.time + B0.time + B1.time + B2.time 吗?
In java I use a synchronized methode to do a add by any threads, but in javascript I do not know how to do. 在Java中,我使用同步方法通过任何线程进行加法,但是在javascript中,我不知道该怎么做。
Example 1: 范例1:
(2) = > $scope.time = $scope.time + $scope.elemAs[0].time; (2)=> $ scope.time = $ scope.time + $ scope.elemAs [0] .time; (2)
(2)
(4) = > $scope.time = $scope.time + $scope.elemAs[1].time; (4)=> $ scope.time = $ scope.time + $ scope.elemAs [1] .time; (2)
(2)
(6) = > $scope.time = $scope.time + $scope.elemBs[0].time; (6)=> $ scope.time = $ scope.time + $ scope.elemBs [0] .time; (2)
(2)
(8) = > $scope.time = $scope.time + $scope.elemBs[1].time; (8)=> $ scope.time = $ scope.time + $ scope.elemBs [1] .time; (2)
(2)
( 10 ) = > $scope.time = $scope.time + $scope.elemBs[2].time; ( 10 )=> $ scope.time = $ scope.time + $ scope.elemBs [2] .time; (2)
(2)
Example 2: 范例2:
(2) = > $scope.time = $scope.time + $scope.elemAs[0].time; (2)=> $ scope.time = $ scope.time + $ scope.elemAs [0] .time; (2)
(2)
(4) = > $scope.time = $scope.time + $scope.elemBs[0].time; (4)=> $ scope.time = $ scope.time + $ scope.elemBs [0] .time; (2)
(2)
(6) = > $scope.time = $scope.time + $scope.elemBs[1].time; (6)=> $ scope.time = $ scope.time + $ scope.elemBs [1] .time; (2)
(2)
(8) = > $scope.time = $scope.time + $scope.elemAs[1].time; (8)=> $ scope.time = $ scope.time + $ scope.elemAs [1] .time; (2)
(2)
( 10 ) = > $scope.time = $scope.time + $scope.elemBs[2].time; ( 10 )=> $ scope.time = $ scope.time + $ scope.elemBs [2] .time; (2)
(2)
Example 3: 范例3:
(2) = > $scope.time = $scope.time + $scope.elemAs[0].time; (2)=> $ scope.time = $ scope.time + $ scope.elemAs [0] .time; (2)
(2)
(4) = > $scope.time = $scope.time + $scope.elemBs[0].time; (4)=> $ scope.time = $ scope.time + $ scope.elemBs [0] .time; (2)
(2)
(6) = > $scope.time = $scope.time + $scope.elemBs[1].time; (6)=> $ scope.time = $ scope.time + $ scope.elemBs [1] .time; (2) same time $scope.time = $scope.time + $scope.elemAs[1].time;
(2) 同时 $ scope.time = $ scope.time + $ scope.elemAs [1] .time; (2)
(2)
( 8 ) = > $scope.time = $scope.time + $scope.elemBs[2].time; ( 8 )=> $ scope.time = $ scope.time + $ scope.elemBs [2] .time; (2)
(2)
I have the answer at my question. 我有我的问题的答案。 I had a big loop in each callback.
我在每个回调中都有一个很大的循环。 The javascript have only one thread for all callbacks.
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);
with this test, I see that I have 10.000 A and 10.000 B or 10.000 B and 10.000 A. I have never a mix of A and B ( AAABAABBA ... ) 通过此测试,我发现我有10.000 A和10.000 B或10.000 B和10.000A。我从不混合使用A和B(AAABAABBA ...)
My code is good, I have no problem doing my additions in my callbacks 我的代码很好,我在回调中进行添加没有问题
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.