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

标签 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');
}

最佳答案

您不能从回调中返回值(在本例中)。这意味着在 getCurrentPosition 内部,回调的返回值必须分配到某处。

将其分配给全局变量是可行的,但在您访问该变量时,尚未为其分配新值。例如

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

想一想:getCurrentPosition 可能正在执行 Ajax 请求以获取位置。这样的请求需要 (a) 时间(几毫秒),因此 (b) 是异步,这意味着 JavaScript 不会等待直到收到响应。您的代码方式更快。当您提醒 x 时,尚未调用 onSuccess

唯一的解决办法:

所有必须访问位置的代码才能在回调中或从回调中调用。

关于Javascript将回调函数的返回值分配给全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7189492/

相关文章:

c++ - 自 lambda 进入 C++ 以来, `Callback` 接口(interface)是否已过时?

javascript - 变量被分配了一个值,但在 Vue 数据对象中声明它并在方法中使用它时从未使用过

javascript - 当我使用 prettier 和 ESLint 在 VSCode 上保存代码时如何设置自动关闭?

ajax - 有人可以列出常见的 javascript 框架/库以及每个框架/库的优缺点吗?

java - JNI 回调调用失败

java - 将位图从 Java 类返回到 Activity

javascript - 我被困在 promise 构造函数中的执行器函数上

javascript - 如何确定嵌入式闪存对象何时加载?

javascript - 在回调中保留变量范围

javascript - 为什么要计算回调?