【问题标题】:Using lb-services count servcie in angular在 Angular 中使用 lb-services 计数服务
【发布时间】:2017-05-18 16:23:47
【问题描述】:
我正在使用 lbservices 在我的角度中使用以下代码,我想获得计数值,但我不是输出为 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();
【问题讨论】:
标签:
angularjs
node.js
loopbackjs
loopback
【解决方案1】:
您的 getOrganisationCount 函数正在对您的应用程序中的组织模型进行网络调用。此网络调用 Organisation.count().$promise 是异步调用,一旦您收到来自服务器,即:异步操作完成时。
但代码 console.log('a2=' + count) 不在 then 块内,它将在响应来自您的服务器之前执行。由于 count 的值最初为 2,因此输出为 2 而第二个
控制台语句在响应之后运行,它的值得到更新,你得到的输出为 8。
如果你运行你的代码,你会看到console.log('a2=' + count)首先输出然后console.log('a1===' + count),这是我上面解释的证明。
如果你想了解更多关于异步函数是如何工作的,你可以阅读这个描述得很好的SO answer。
【解决方案2】:
因为一旦收到来自异步调用的响应,就会打印 a1 值,而立即打印 a2。
then 回调中的代码在收到服务器响应时调用,而其他代码按顺序执行。
更新:由于您使用的是 Promise,因此您应该从函数调用中返回 Promise,然后调用者可以解析它。
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);
});
请注意该函数现在如何返回一个 Promise 而不是 count