变量的JavaScript设置值失败

时间:2014-07-19 17:23:15

标签: javascript intel-xdk

我是javascript的新手。我尝试使用以下代码将值设置为变量但失败了。有人请帮助指出我的代码有什么问题。

当我尝试打印变量" deviceLatitude"的值时,它会给我" undefined"。但是如果我从函数内部打印值,它会给我正确的值。我做错了什么?

我需要为此值设置全局变量的原因是因为我需要在后期使用它,例如根据需要比较不同位置的距离。

var deviceLatitude;
var deviceLongitude;
function suc (p) {
     deviceLatitude = p.coords.latitude;
     deviceLongitude = p.coords.longitude;
     // alert(deviceLatitude);
}
intel.xdk.geolocation.getCurrentPosition(suc);
alert(deviceLatitude);

3 个答案:

答案 0 :(得分:2)

suc被异步回叫,因此当您在调用intel.xdk....后发出提醒时,suc尚未被调用。

请注意文档,我的重点:

  

使用此命令获取当前位置。这个命令   异步获取近似的纬度和经度   设备。当数据可用时,将调用成功函数。如果   获取位置数据时出错,调用错误函数。

因此,如果您想对deviceLatitude执行某些操作,则必须在内部进行回调。

如果您是承诺类型的人,您可以这样做:

function getCurrentPosition() {
  return new Promise(function(resolve, reject) {
    intel.xdk.geolocation.getCurrentPosition(resolve, reject);
  });
}

getCurrentPosition.then(
  function(p) {
    //do something with p.coords.latitude
  },
  function() {
    //something went wrong
  }
 );

答案 1 :(得分:2)

尝试为成功创建匿名函数,为错误创建其他函数。 然后创建另一个函数,当数据可用时,将由异步调用。

function overrideLocalStore(lat, log)
{
    alert("lat"+lat+" long"+long);
    localStorage.setItem("deviceLatitude", lat);
    localStorage.setItem("deviceLongitude", log);
}

intel.xdk.geolocation.getCurrentPosition(
    function(p)
    {
        alert("geolocation success");
        if (p.coords.latitude != undefined)
            overrideLocalStore(p.coords.latitude, p.coords.longitude);
    },
    function()
    { 
        alert("geolocation failed"); 
        getLocation();
    }
);

// Use whatever you need
alert(localStorage.getItem("deviceLatitude"));
alert(localStorage.getItem("deviceLongitude"));

答案 2 :(得分:1)

正如@torazaburo指出的那样,不可能将异步函数数据输出到全局变量中。

但要实现所需,解决方法可以解决这个问题。由于这是HTML5应用程序,因此可以使用localStorage保存值,并在以后的任何时间从其他屏幕/功能访问它。

一个简单的示例代码如下:

intel.xdk.geolocation.getCurrentPosition(
            function(p) {
                if (p.coords.latitude != undefined) {
                    localStorage.deviceLatitude = p.coords.latitude;
                    localStorage.deviceLongitude = p.coords.longitude;
                }
            },
            function() { 
                alert("geolocation failed"); 
            }
        );