【问题标题】: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

      【讨论】:

      • 你能告诉我解决这个问题的方法吗
      猜你喜欢
      • 2016-10-03
      • 2014-05-15
      • 2022-07-09
      • 2017-09-13
      • 2013-05-29
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多