簡體   English   中英

異步函數中的變量范圍

[英]variable scope in asynchronous function

我已經構建了函數來返回一些變量。 但我的函數異步使用另一個函數。

function getVariable() {
  var myVariable;
  asyncronousFunction(function(...){

    myVariable = ...

  });
  return myVariable;
}

問題是, myVariable的以及內側的外asyncronousFunction是不同的變量。 所以我不能從異步函數賦值給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++;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM