Javascript将回调函数的返回值分配给全局变量

Ser*_*yol 14 javascript callback

我的问题是关于Javascript.我有一个回调函数,它在成功的回调上接收一个Position对象.

问题是当我尝试在成功回调时将Position对象的属性设置为全局变量时,它只是不允许我这样做而且全局只是未定义.

作为一种解决方法,而不是直接将对象属性设置为全局变量,我试图通过回调函数返回它,但我找不到一种方法将回调函数的返回值设置为全局变量.

这是简化的代码.

var x;

navigator.geolocation.getCurrentPosition(onSuccess, onError);

//on Successful callback receives a Position Object
function onSuccess(position) {  
  var coords = position.coords;  
    x=coords;       // Setting directly to an object does not work x still remains undefined after succesful callback               
return coord; // Trying to set this to a global object 

}

// onError Callback receives a PositionError object
//
function onError(error) {
    alert('code: '    + error.code    + '\n' +
          'message: ' + error.message + '\n');
}
Run Code Online (Sandbox Code Playgroud)

Fel*_*ing 15

您无法从回调中返回值(在本例中).这意味着在内部getCurrentPosition,必须在某处分配回调的返回值.

将其分配给全局变量有效,但在您访问该变量时,尚未为其分配新值.例如

// x is assigned in `onSuccess`
var x;
navigator.geolocation.getCurrentPosition(onSuccess, onError);
alert(x); // will be undefined, the response is not processed yet
Run Code Online (Sandbox Code Playgroud)

想一想:getCurrentPosition可能正在做一个Ajax请求来获得这个位置.这样的请求需要(a)时间(几毫秒),因此(b)是异步的,这意味着JavaScript 不会等到收到响应.您的代码的方式更快.onSuccess当你发出警报时,还没有打电话x.

唯一解决方案

所有必须访问该位置的代码都在回调中或从回调中调用.