2017-01-04 7 views
1

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

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(); 

ответ

0

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

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

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

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

0

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

Код внутри 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

+0

Можете ли вы сказать мне решение этой проблемы? –