异步函数中的变量作用域

variable scope in asynchronous function

本文关键字:变量 作用域 函数 异步      更新时间:2023-09-26

我已经构建了返回某个变量的函数。但是我的函数异步地使用了另一个函数。

function getVariable() {
  var myVariable;
  asyncronousFunction(function(...){
    myVariable = ...
  });
  return myVariable;
}

问题在于asyncronousFunction的外部和内部myVariable是不同的变量。所以我不能从异步函数给myVariable赋值。

如何解决这个作用域问题?谢谢。

它们是相同的变量,但是您不能从getVariable函数同步地return异步函数调用的结果。myVariable的值将在稍后某个未指定的时间点异步更新。但是你的函数现在返回值。这行不通。

这意味着您的getVariable函数也是异步的,这意味着您必须以这种方式设计它。例如,它可以接受回调,就像asyncronousFunction一样。

它们是不是不同的变量,它是相同的变量…但是在函数末尾return之前,您没有为myVariable赋值。

正确的模式应该是getVariableasychronousFunction接受回调,当asynchronousFunction完成执行时,这些回调将被执行。

function getVariable(callback) {
  var myVariable;
  asyncronousFunction(function(/* pass callback as one of the parameters */){
    myVariable = ...
  });
  // Don't return myVariable, as it's useless at this point
};
function asyncronousFunction(callback) {
   // This simulates the asynchronous call. When the call finishes, invoke callback and pass the result as a parameter.
   setTimeout(function () {
        callback("result");
   }, 1000);
}

然后编辑如何使用函数getVariable()

所以你可能有:

var value = getVariable();
// do whatever with value
value++;

你现在应该有:

getVariable(function (value) { // value is now passed as a parameter
    value++;
});