Javascript 检测异步函数中全局变量的更新
我无法将变量更新到全局范围。我声明了一个变量状态,然后当函数完成时,我返回变量。这一切都有效。然而,我有另一个异步运行的函数,我正在等待var更新,但它永远不会得到更新后的状态值并无限期地循环“notReady”。我期望“返回状态”在全局范围内更新变量,但它没有。如何获取更新的全局状态变量以在以前激发的函数中更新Javascript 检测异步函数中全局变量的更新,javascript,jquery,global-variables,Javascript,Jquery,Global Variables,我无法将变量更新到全局范围。我声明了一个变量状态,然后当函数完成时,我返回变量。这一切都有效。然而,我有另一个异步运行的函数,我正在等待var更新,但它永远不会得到更新后的状态值并无限期地循环“notReady”。我期望“返回状态”在全局范围内更新变量,但它没有。如何获取更新的全局状态变量以在以前激发的函数中更新 var state = 'notReady'; function do(state){ // long/heavy webGL function state = 'rea
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();
在
do
函数中,有一个与全局变量同名的函数参数(state
)。这会屏蔽全局变量。所有“本机”变量(例如字符串和数字)都是通过值传递的,而不是通过引用传递的
简单的修正,只是完全失去了论点。然后您将使用全局变量
var state = 'notReady';
function fndo() {
// long/heavy webGL function
state = 'ready'
return state; //state successfully changes to 'ready'
};
$.when(fndo(state)).then(function (state) {
console.log(state); // this logs 'ready' successfully
return state;
});
function previousFiredFunction() {
function waitForState() {
console.log('wfs', state);
if (state === 'ready') {
// do something when ready (this is never 'ready')
} else {
setTimeout(waitForState, 200);
}
}
waitForState();
}
previousFiredFunction();
顺便说一句,我真的很惊讶你居然能运行这段代码,因为
do
是一个很好的例子。我必须更改名称才能运行您的代码。typeof state==='ready'
这永远不会是真的,因为'ready'
不是typeof的有效值。猜猜你的类型不应该在那里吗?好的,谢谢。我忽略了这一点,是的,它不应该在那里,但是当被删除时,我仍然在控制台的else中获得旧状态,setTimeout在那里,所以它仍然没有得到更新。(编辑代码以删除typeof)就是这样!我想我排除了这个可能性。作为一个副词,do()实际上不是我函数的名称,而是一个很好的例子。