javascript for循环暂停

时间:2010-01-12 13:37:11

标签: javascript

我有一个for循环,它运行一系列函数并调用每个函数。 理想情况下,我想以特定的顺序调用它们,因为一个输出可能会影响其后的输出。 无论如何在没有设定时间间隔或定时器的情况下做到这一点?

抱歉......我想我应该多解释一下......我想到的例子有时可能会使用ajax,这意味着我必须等待ajax成功才能继续。 (其他时候我不需要等待ajax成功)所以我想设置一个条件,如if(成功){继续for循环},其中成功是一个变量设置循环的每个部分的成功。 / p>

2 个答案:

答案 0 :(得分:6)

Javascript同步运行,这意味着没有两个函数可以同时执行。只要你按照正确的顺序运行它们,就不应该有任何问题。

在等待ajax响应时,您可以将XMLHttpRequest设置为同步运行(因此,sjax而不是ajax)或设置某种函数迭代器,其工作方式如下:

var FunctionIterator = {
   nextFunction: 0,
   functionArray: [],
   callNext: function ()
   {
       this.functionArray[this.nextFunction].apply(null, arguments);
       this.nextFunction++;
   }
}

然后你就像使用它一样:

FunctionIterator.functionArray.push(someFunctionName);
FunctionIterator.functionArray.push(function (arg1) { alert(arg1); });

FunctionIterator.callNext(arg1, arg2, arg3);

也许是不言自明的,但每次运行callNext函数时,都会调用下一个函数,并且数组索引会增加1,以便为下一个函数调用做准备。

答案 1 :(得分:0)

如果函数运行异步,你也可以将它们设置为递归调用(代码完全未经测试,只是为了得到这个想法):

var funcarr = [];
function iterfuncs(arr){ 
   arr.pop()(); 
   if(arr.length >=1){ 
     iterfuncs(arr);
   } 
}

如果您的数组中有很多函数并且担心您的调用堆栈,您可以更改要使用0超时调用的递归调用,这使得调用函数在执行下一个函数之前返回。可怜的勒芒尾递归。

window.setTimeout(function(){ iterfuncs(arr); },0);