在 angular 中使用 lb-services 计数服务

Using lb-services count servcie in angular

我在 angular 使用 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();

因为一旦收到异步调用的响应就会打印 a1 值,而 a2 会立即打印。

当收到服务器响应时调用 then 回调中的代码,而其他代码按顺序执行。

更新: 由于您正在使用 promise,因此您应该 return 从函数调用中 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);
});

记下函数现在 return 是一个 promise 而不是 count

您的 getOrganisationCount 函数正在对您在 application.This 网络调用中拥有的组织模型进行网络调用 Organisation.count().$promise 是一个异步调用,then 中的代码一旦你从服务器得到响应,块将被执行,即:当异步操作完成时。

但是代码 console.log('a2=' + count) 不在 then 块内,它将在响应来自您的服务器之前执行。由于 count 的值最初为 2,因此您得到的输出为 2,而第二个 响应后 运行s 的控制台语句,它的值得到更新,你得到的输出为 8.

如果你 运行 你的代码,你会看到 console.log('a2=' + count) 先输出然后 console.log('a1===' + count) 这证明了我上面解释的内容。

如果您想更多地了解异步函数的工作原理,可以阅读这篇详尽的描述SO answer