编程语言
首页 > 编程语言> > javascript – 如何在Angular中获取一个变量之外的变量?

javascript – 如何在Angular中获取一个变量之外的变量?

作者:互联网

参见英文答案 > How can I access a variable outside a promise `.then` method?                                    2个
所以我在这里有一个代码:

.factory("Geolocation", ["$cordovaGeolocation",
  function ($cordovaGeolocation) {
    var posOptions = {
      timeout: 10000,
      enableHighAccuracy: false
    };
    var getCurrentPosition = $cordovaGeolocation.getCurrentPosition(posOptions);
    return {
      lat: function () {
       getCurrentPosition.then(function(position) {
          return position.coords.latitude; //getting undefined  
        })
      },
      long: function() {
       getCurrentPosition.then(function(position) {
          return position.coords.longitude;  
        })
      }
    }

  }
])

在我的控制器中,我称之为Geolocation.lat()或Geolocation.long().

现在我的问题是我得到了undefined而不是lat和long.

如果我这样做:

return getCurrentPosition.then(function(position) {
  return position.coords.longitude;  
})

我得到了另一个多余的承诺,我唯一想要发生的就是获得lat和long.

有没有一种简单的方法来访问该承诺中的变量?

任何帮助将非常感激.

更新(尝试在外部声明一个变量并在promise中填充但我仍然得到一个空值.

.factory("Geolocation", ["$cordovaGeolocation", "$rootScope",
  function ($cordovaGeolocation, $rootScope) {
    var posOptions = {
      timeout: 10000,
      enableHighAccuracy: false
    };
    var getCurrentPosition = $cordovaGeolocation.getCurrentPosition(posOptions);
    $rootScope.latitude = null;
    $rootScope.longitude = null;
    return {
      lat: function () {
       getCurrentPosition.then(function(position) {
          $rootScope.latitude = position.coords.latitude;  
        })
        return $rootScope.latitude;
      },
      long: function() {
       getCurrentPosition.then(function(position) {
          return $rootScope.longitude; 
        })
      }
    }

  }
])

解决方法:

由于您正在执行异步操作,因此您采用的方法永远不会起作用.

相反,你应该做的是:

>在promise之外声明一个范围变量.
>解决工厂退回的承诺
>将声明的值分配给response.data.

所以不要从工厂返回.

而只是将承诺发送给控制器.

然后在控制器中执行上述步骤并获取数据.

var promise = yourFactory.get() //get the promise
promise.then(function(response){
      $scope.lat = response.data
})

标签:angular-promise,javascript,angularjs
来源: https://codeday.me/bug/20190828/1754516.html