Использование lb-services count servcie в угловых

Я использую код ниже в моем угловом использовании lbservices, я хочу получить значение count, но я вместо вывода как a1=8 и a2=8, я получаю результат как a1=8 и a2=2,

var getOrganisationCount = function () {
                var count = 2;
                var query = {};
                Organisation
                    .count()
                    .$promise
                    .then(function (response) {
                        count = response.count;
                        console.log('a1===' + count);
                    });
                console.log('a2=' + count);
            };
            getOrganisationCount();

2 ответа

Решение

Ваш getOrganisationCount Функция делает сетевой вызов модели организации, которая у вас есть в вашем приложении. Этот сетевой вызов Organisation.count().$promise это асинхронный вызов и код внутри then Блок будет выполнен, как только вы получите ответ от сервера, то есть: когда асинхронная операция завершена.

Но код console.log('a2=' + count) не внутри then заблокировать, и он будет выполнен до того, как ответ придет с вашего сервера. Поскольку значение count изначально равным 2, вы получаете вывод как 2, а второй оператор консоли выполняется после ответа, его значение обновляется, и вы получаете вывод как 8.

Если вы запустите свой код, вы увидите, что console.log('a2=' + count) сначала выход console.log('a1===' + count) что является доказательством того, что я объяснил выше.

Если вы хотите больше узнать о том, как работает асинхронная функция, вы можете пройти этот хорошо описанный ответ SO.

Поскольку значение a1 печатается после получения ответа от асинхронного вызова, тогда как a2 печатается немедленно.

Код внутри then обратный вызов вызывается, когда ответ сервера получен, тогда как другой код выполняется последовательно.

Обновление: так как вы работаете с обещанием, вы должны вернуть обещание из вызова функции, который вызывающий затем может разрешить.

var getOrganisationCount = function() {
  var count = 2;
  var query = {};
  return Organisation
    .count()
    .$promise
    .then(function(response) {
      count = response.count;
      console.log('a1===' + count);
      return count;
    });
};
getOrganisationCount().then(function(count) {
  console.log('a2=' + count);
});

Обратите внимание, что теперь функция возвращает обещание вместо count

Другие вопросы по тегам