[英]do while loop not working properly in Titanium
我认为这应该很容易,但是我不知所措。
我创建了一个应用程序,该应用程序基于“ setInterval”延迟在钛合金屏幕上循环显示图像。
它可以无限期地循环图像,但是我想添加一个函数,使用户可以按一定的时间延迟(通过循环设置一定的迭代次数)或按一下按钮(“停止”)退出循环。
这段代码可以调用一个函数,该函数从我的mamp服务器中提取一个图像,并在Titanium中创建一个显示该图像的新窗口:
setInterval(function(){call();}, 3000);
但是,当我尝试将其更进一步时,它将不起作用。
var keepGoing;
do {
setInterval(function(){call();}, 3000);
}
while (keepGoing);
function stop(e){
return keepGoing = false;
}
从我的xml中调用函数“ stop”,如下所示:
<Button id="stop" onClick="stop">stop</Button>
我什至尝试了以下方法都无济于事:
do {
setInterval(function(){call();}, 3000);
}
while (0 > 1);
这样它将循环一次,然后停止工作。
任何想法将不胜感激!
一旦启动setInterval
,它将进入无限循环。 如果要停止setInterval
只需调用clearInterval
。
var interval;
interval = setInterval(function(){call();}, 3000);
function stop(e){
clearInterval(interval);
}
就我而言,这已经完成了工作。
您需要这样的模式:
function loop () {
call();
if (keepGoing) {
setTimeout(loop, 3000);
}
}
loop();
顺便说一句,下面的代码为什么不起作用是面试中的一个普遍问题(有人问我几次)。
var keepGoing;
do { setInterval(call, 3000); } while (keepGoing);
诀窍是,传递给setInterval
函数有时会在3秒后调用,但前提是主线程是空闲的。 而且它永远不会免费-它正在无限循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.