【问题标题】:Accessing angularjs factory data outside promise [duplicate]在promise之外访问angularjs工厂数据[重复]
【发布时间】:2016-04-22 18:36:18
【问题描述】:

我有一个名为 readingService 的工厂,工厂方法 GetLastSyncTimestamp 从 Web 服务返回 DateTime,在调用工厂后,我在 $scope.lastSyncTimestamp 变量中分配了返回 DateTime,但问题出在我可以得到的承诺中日期时间正确

 readingService.GetLastSyncTimestamp($scope.id).then(function(d) {
            $scope.lastSyncTimestamp = d.data;
            console.log($scope.lastSyncTimestamp);
        });

但在承诺之外我没有得到任何数据

 readingService.GetLastSyncTimestamp($scope.id).then(function(d) {
            $scope.lastSyncTimestamp = d.data;
        });

console.log($scope.lastSyncTimestamp);

有什么方法可以在 promise 之外获取数据?

【问题讨论】:

  • 确定使用服务,但问题与 promise 的异步调用有关。当您尝试打印时,实际上没有设置值
  • 是的,问题是异步调用,但需要一种方法将其移出
  • 使用下面的服务。

标签: javascript angularjs


【解决方案1】:

创建服务

  .service('DataService', function () {
            var service = {};
            service.defaultvalue= "1";
            return service;
        })

并将其注入控制器。 然后你可以像这样在 promise 中使用它:

dataservice.lastSyncTimestamp = d.data;

而且外面也可以工作。

示例: https://github.com/leader80/angularjs-dataservice/blob/master/js/dataService.js

【讨论】:

    【解决方案2】:

    在这个例子中:

    readingService.GetLastSyncTimestamp($scope.id).then(function(d) {
        $scope.lastSyncTimestamp = d.data;
    });
    
    console.log($scope.lastSyncTimestamp);
    

    在执行console.log($scope.lastSyncTimestap); 行之前,promise 没有返回。您可以在 Promise 中处理数据,也可以将您希望对数据执行的功能封装在一个函数中,然后从 Promise 中调用该函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      • 2014-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多