Я использую две асинхронные веб-службы. Я должен сделать время для добавления каждого объекта, возвращенного в ответах. Целевые данные одинаковы ($ scope.time - глобальная переменная). Я боюсь, что когда 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);
В моих результатах я не уверен, чтобы получить $ scope.time = A0.time + A1.time + B0.time + B1.time + B2.time ?
В java я использую синхронизированный метод для добавления по любым потокам, но в javascript я не знаю, как это сделать.
Пример 1:
(2) => $ scope.time = $ scope.time + $ scope.elemAs [0].time; (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)
(10) => $ scope.time = $ scope.time + $ scope.elemBs [2].time; (2)
Пример 2:
(2) => $ scope.time = $ scope.time + $ scope.elemAs [0].time; (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)
(10) => $ scope.time = $ scope.time + $ scope.elemBs [2].time; (2)
Пример 3:
(2) => $ scope.time = $ scope.time + $ scope.elemAs [0].time; (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)
(8) => $ scope.time = $ scope.time + $ scope.elemBs [2].time; (2)
У меня есть ответ на мой вопрос. У меня была большая петля в каждом обратном вызове. 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. У меня никогда не было сочетание A и B (AAABAABBA...)
Мой код хорош, у меня нет проблем с выполнением моих дополнений в моих обратных вызовах
$scope.time
не является глобальной переменной, это свойство$scope
, но что касается вашей реальной проблемы, я не могу сказать, что вы спрашиваете. Можете ли вы еще раз уточнить, какие проблемы у вас возникли