在Titanium中,while循环不能正常工作

时间:2014-05-28 18:36:19

标签: javascript titanium titanium-alloy

我认为这应该是一个简单的问题,但我最终会陷入困境。

我创建了一个应用程序,它根据延迟“setInterval”在Titanium中通过屏幕循环图像。

它无限期地循环图像,但我想添加一个函数,用户可以在一个时间延迟(通过循环的一定次数的迭代)或只是当他们按下按钮时退出循环(“停止“)。

此代码用于调用一个函数,该函数从我的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);

这样它会循环一次然后停止工作。

任何想法都将不胜感激!

2 个答案:

答案 0 :(得分:3)

启动setInterval后,它将进入无限循环。如果您想停止setInterval,请拨打clearInterval

var interval;

interval = setInterval(function(){call();}, 3000);

function stop(e){
    clearInterval(interval);
}

这完成了我的工作。

答案 1 :(得分:0)

你需要这样的模式:

function loop () {
    call();   
    if (keepGoing) {
        setTimeout(loop, 3000);
    }
}
loop();
顺便说一句,为什么下面的代码不起作用是一个关于访谈的流行问题(有人多次问过我。)

var keepGoing;
do { setInterval(call, 3000); } while (keepGoing);

诀窍是,传递到setInterval的函数在这里有时会在3s之后调用,但前提是主线程是空闲的。它永远不会自由 - 它正在做无限循环。