无法在回调中设置变量值

时间:2014-08-06 21:29:10

标签: javascript intel-xdk

   var currentLatitude = 0;

   var getLocation = function() {

   var suc = function(p) {
      alert("geolocation success");
      if (p.coords.latitude != undefined) {
        currentLatitude = p.coords.latitude;
        currentLongitude = p.coords.longitude;
      }
   };

   var fail = function() {
      alert("geolocation failed"); 
      getLocation();
   };

   intel.xdk.geolocation.getCurrentPosition(suc,fail);
}

 getLocation();
 alert(currentLatitude); //this is giving me zero

currentLatitude将为0,因为它们被定义为全局。价值没有改变。但是当我做console.log(p.coords.latitude)时,它给了我价值。

我尝试了很多东西,但似乎没有任何工作。我很确定我的逻辑是错误的。

1 个答案:

答案 0 :(得分:1)

您的问题来自getCurrentPosition()的异步执行。当您调用它时,您正在安排访问GPS(或任何其他GeoLocation功能,可能是一堆包括基于您的IP地址的最佳猜测)的请求,以便将来由您的浏览器自行决定。一旦触发了它(并且它完全是可选的,它可能永远不会触发),那么将调用suc()fail()。如果您编写代码来调用此getLocation(),则看起来像这样:

var currentLatitude, currentLongitude;

var getLocation = function () {
    var suc = function (p) {
        alert("geolocation success:"+p.coords.latitude);
        if (p.coords.latitude != undefined) {
            currentLatitude = p.coords.latitude;
            currentLongitude = p.coords.longitude;
        }

    };
    var fail = function () {
        alert("geolocation failed");
        getLocation();
    };

    navigator.geolocation.getCurrentPosition(suc, fail);
}

getLocation();
console.log(currentLatitude+':'+currentLongitude);

您会在日志中看到undefined : undefined,因为您在计划getCurrentPosition()之后但在执行之前进行了日志记录。您应该在currentLatitude回调中放置使用currentLongitudesuc()的代码。或者,如果您想要将事情分开,请写一个useLocation()函数并在suc()回调中调用它。