2017-08-14 52 views
1

在另一个线程一些帮助后,我现在有一个等待3000的工作代码,然后设置一个变量为1然后循环检查每1000至该变量已发生变化,然后警告等待,直到功能齐全

现在

var myvalue; 
 

 
setTimeout(function() { 
 
    myvalue = 1; 
 
}, 3000); 
 

 
function check() { 
 
    if (myvalue == 1) { 
 
    alert("Value Is Set"); 
 
    } else { 
 
    setTimeout(check, 1000); 
 
    } 
 
} 
 

 
alert("debug1"); 
 
check(); 
 
alert("debug2");

我的问题是,它并没有等到check()功能在移动之前完成。我已经添加了一些调试alert s,并且可以看到所有消息都立即被触发。

如何在不使用超时的情况下等待?

+4

这似乎是一个很*** *** X/Y的问题。轮询从来不是一个好主意,几乎总是有一个更好的解决方案。当变量改变时,你有没有办法提升/监听事件? –

+1

做研究/了解回调函数...我想你需要' –

+0

在哪个行动你想要这个功能。 – weBBer

回答

4

您可以传递回调并在函数完成时调用它。

像这样:

var myvalue; 
 

 
setTimeout(function() { 
 
    myvalue = 1; 
 
}, 3000); 
 

 
function check(callback) { 
 
    if (myvalue == 1) { 
 
    alert("Value Is Set"); 
 
    callback && callback(); 
 
    } else { 
 
    setTimeout(check, 1000, callback); 
 
    } 
 
} 
 

 
alert("debug1"); 
 
check(function() { 
 
    alert("debug2"); 
 
});

+0

我很困惑,因为如果我在检查函数后添加另一个警报,那么它仍然会在开始时执行 - 我希望它在检测函数完成之前等待,直到移动到 – fightstarr20

+0

这是因为'setTimeout()'是有效的异步 - 因此你需要使用回调模式,因为这个答案暗示 –

+0

@ fightstarr20你需要把你想要的代码放在回调函数中的原始函数**之后(就像它) –