异步函数中的变量作用域
variable scope in asynchronous function
我已经构建了返回某个变量的函数。但是我的函数异步地使用了另一个函数。
function getVariable() {
var myVariable;
asyncronousFunction(function(...){
myVariable = ...
});
return myVariable;
}
问题在于asyncronousFunction
的外部和内部myVariable
是不同的变量。所以我不能从异步函数给myVariable
赋值。
如何解决这个作用域问题?谢谢。
它们是相同的变量,但是您不能从getVariable
函数同步地return
异步函数调用的结果。myVariable
的值将在稍后某个未指定的时间点异步更新。但是你的函数现在返回值。这行不通。
这意味着您的getVariable
函数也是异步的,这意味着您必须以这种方式设计它。例如,它可以接受回调,就像asyncronousFunction
一样。
它们是不是不同的变量,它是相同的变量…但是在函数末尾return
之前,您没有为myVariable
赋值。
正确的模式应该是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++;
});
相关文章:
- 带有KendoUI组件的Javascript变量作用域
- Javascript变量作用域:从回调函数中提取变量
- 使用JavaScript回调函数了解变量作用域和闭包
- jquery.post和变量作用域
- 变量作用域:在函数之间传递的名称
- 在 AJAX 和 Javascript 中使用变量和变量作用域
- 节点.js/express.js中的变量作用域
- jquery ajax 回调变量作用域(为什么有些在作用域中,而另一些则不在作用域中)
- JavaScript 中的变量作用域
- ajax GET 和 POST 中的变量作用域
- Javascript:变量作用域和全局变量的弊端
- Javascript 自执行函数和变量作用域
- 拼接上的Javascript全局变量作用域/覆盖
- 在Node中与jsdom和jquery共享变量作用域
- NodeJS:代码优化和变量作用域
- Javascript数组变量作用域
- AngularJS ng控制器指令不接受javascript中的变量(作用域函数),也不给出任何错误
- 回调函数中的变量作用域呢
- JavaScript/jQuery变量作用域导致错误
- AJAX变量作用域