Использование 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