我已经构建了返回一些变量的函数。但我的函数异步使用另一个函数。
function getVariable() {
var myVariable;
asyncronousFunction(function(...){
myVariable = ...
});
return myVariable;
}
问题是myVariable
之外和之内的asyncronousFunction
是不同的变量。所以我无法从异步函数中为myVariable
赋值。
如何解决此范围问题?感谢。
答案 0 :(得分:5)
它们是相同的变量,但您不能return
getVariable
函数同步调用异步函数的结果。 myVariable
的值将在稍后某个未指定的时间点异步更新。但是你的函数正在返回值 now 。这不起作用。
这意味着您的getVariable
函数也是异步的,这意味着您必须以这种方式设计它。例如,它可以接受回调,就像asyncronousFunction
那样。
答案 1 :(得分:4)
它们是没有不同的变量,它是相同的变量......但是在myVariable
之前你没有为return
分配值功能。
此处的正确模式是getVariable
和asychronousFunction
接受回调,这些回调在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++;
});