关于递归函数的Javascript settimeout?

时间:2011-11-18 02:54:12

标签: javascript recursion timeout

function theFunction(a){
    var newNum = a+1;
    var iframe = document.createElement("iframe");
    var currURL = urlArray[a];
    iframe.src = currURL;
    iframe.frameBorder = "0";
    iframe.height = "0";
    iframe.width = "0";

iframe.onload = function(){
    document.getElementById('number').innerHTML = a;
};
    var arrayLength = someArray.length;

    if(a != arrayLength){
     theFunction(newNum);
     }
}

这是我通过数组递归的基本函数。无论如何,有时它经历(在//什么都不做的时候)。它会卡住,我希望它在说2秒后超时并转到下一个。这可能吗,还是我必须完全停止这个功能?

编辑:设置超时可能不是我想要的,但有些方法可以停止该功能并转到下一个。

编辑2:在代码中添加了更多内容

2 个答案:

答案 0 :(得分:1)

嗯。你知道它被“卡住”时究竟发生了什么吗?因为如果“卡住”意味着遇到循环或其他一些错误,那么setTimeout将无法帮助你。根据我的经验,设置为使用setTimeout执行的代码将在给定的延迟已经过去或其他代码已停止执行时发生,以最后一次发生。换句话说,我认为您不能使用setTimeout中断当前正在运行的代码,这似乎就是您所要求的。

我知道这是一种不答案;我建议改为坚持卡住的本质。

答案 1 :(得分:0)

你可以“尝试”使用iframe.contentDocument.readyState,但我说“尝试”没有信心,因为我的测试它总是出现在“完整”状态,但可能当你遇到一些页面时需要一段时间才能加载它们可能会留在以前的一些状态。

有关此信息和不同状态的更多信息,请参阅

http://msdn.microsoft.com/en-us/library/ms534358%28v=vs.85%29.aspx