AngularJS Services и параллельный доступ к глобальной переменной

0

Я использую две асинхронные веб-службы. Я должен сделать время для добавления каждого объекта, возвращенного в ответах. Целевые данные одинаковы ($ 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)

  • 0
    $scope.time не является глобальной переменной, это свойство $scope , но что касается вашей реальной проблемы, я не могу сказать, что вы спрашиваете. Можете ли вы еще раз уточнить, какие проблемы у вас возникли
Теги:
global-variables

1 ответ

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. У меня никогда не было сочетание A и B (AAABAABBA...)

Мой код хорош, у меня нет проблем с выполнением моих дополнений в моих обратных вызовах

Ещё вопросы

Сообщество Overcoder
Наверх
Меню