在异步功能中检测对全局var的更新

时间:2018-08-25 22:28:23

标签: javascript jquery global-variables

我无法将变量更新到全局范围。我已经声明了一个变量 state ,然后当一个函数完成时,我将返回该变量。所有这一切。但是,我还有另一个函数在异步地运行,以等待var更新,但是它从未获得更新的 state 值,并且会无限期地循环“ notReady”。我期望“返回状态”可以更新全局范围内的变量,但事实并非如此。如何获取更新的全局 state 变量以在以前触发的函数中进行更新?

var state = 'notReady';

function do(state){
   // long/heavy webGL function
   state = 'ready'
   return state; //state successfully changes to 'ready'
};

$.when( do(state) ).then(function(state) {
    console.log(state); // this logs 'ready' successfully
    return state;
});


function previousFiredFunction(){
   function waitForState(){
      if(state === 'ready'){
         // do something when ready (this is never 'ready')
      } else {
         setTimeout(waitForState, 200); 
      }
   }
   waitForState();
}
previousFiredFunction();

1 个答案:

答案 0 :(得分:1)

Dim guiSettings = XElement.Load(_localAppDataFilePath & "\Frontier Developments\Elite Dangerous\Options\Graphics\GraphicsConfigurationOverride.xml") target = guiSettings.Element("GUIColour").Elements("Default").[Single]() r = target.Element("MatrixRed").Value 函数中,您有一个函数自变量,其名称与全局变量(<Feature>)同名。这将掩盖全局变量。并且所有“本地”变量(例如字符串和数字)均按值而不是按引用传递。

简单的解决方法,只是完全失去了论据。然后,您将使用全局变量。

do

顺便说一句,令我惊讶的是您完全可以运行此代码,因为statekeyword in JavaScript。我不得不更改名称才能运行您的代码。