[英]variable scope in asynchronous function
我已經構建了函數來返回一些變量。 但我的函數異步使用另一個函數。
function getVariable() {
var myVariable;
asyncronousFunction(function(...){
myVariable = ...
});
return myVariable;
}
問題是, myVariable
的以及內側的外asyncronousFunction
是不同的變量。 所以我不能從異步函數賦值給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++;
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.