2017-08-14 110 views
0

我想检查一个变量是使用JavaScript等于1 ...等待,直到变量等于

myvalue = 1; 
 

 
function check() { 
 
    if (myvalue == 1) { 
 
     return setTimeout(check, 1000); 
 
    } 
 

 
    alert("Value Is Set"); 
 
} 
 

 
check();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

我上添加延迟到变量的设置规划但现在为什么这个简单的版本不起作用?

+0

不清楚,你问的?你正在调用同一个函数,并且每次都进入'if'循环。所以? –

+1

你最好听听某种变化的事件,比如在这个问题中:[在JavaScript或jQuery中监听变量的变化](https://stackoverflow.com/questions/1759987/listening-for-variable-更改在JavaScript或jQuery) – Liam

+1

你不显示任何jQuery代码在这里或任何代码,改变'myvalue'的值 –

回答

1

使用setTimeout(check, 1000);只能调用一次该功能。这不是你想要的。

你在找什么是setInterval它执行函数每n毫秒。

看下面的例子,等待值为1,使用setInterval,然后清除setInterval实例。

等待4秒运行下面的代码片段时:

// First - set the value to 0 
 
myvalue = 0; 
 

 
// This variable will hold the setInterval's instance, so we can clear it later on 
 
var interval; 
 

 
function check() { 
 
    if (myvalue == 1) { 
 
     alert("Value Is Set"); 
 

 
     // We don't need to interval the check function anymore, 
 
     // clearInterval will stop its periodical execution. 
 
     clearInterval(interval); 
 
    } 
 
} 
 

 
// Create an instance of the check function interval 
 
interval = setInterval(check, 1000); 
 

 
// Update the value to 1 after 4 seconds 
 
setTimeout(function() { myvalue = 1 }, 4000);

+0

它不返回“setTimeout函数的一个实例”。它返回它的返回值。原始代码也应该工作,问题很可能是该值从未设置。 – Matthias247

+0

这仍然是错误的。在第一次超时时间内,'check'将被调用,并且下一个'setTimeout'将被启动。即使'return'关键字是不必要的,整体行为与基于setInterval的行为没有区别。 – Matthias247

+0

好吧,我的眼睛不好。如果支票是'if(myvalue!= 1)',那么OPs代码就可以工作,这是我第一次看到。然后,一个同步的setTimeout循环会被踢入,并且类似于基于setInterval的解决方案。我只想指出setInterval不是必需的,setTimeout可以做同样的事情(如果使用得当的话)。 – Matthias247