如何在while循环中使setTimeout在JavaScript中按顺序执行?

时间:2015-09-15 08:27:26

标签: javascript

如何在循环执行循环时简化以下操作?

var x = 2;
var y = 10;
while (x<y) {
  x = x+2;
  setTimeout(function(){ y = y+1;
  }, 500);
}

2 个答案:

答案 0 :(得分:6)

改为使用setInterval()

  

setTimeout在超时时执行一次该功能。 setInterval重复执行函数和interval

source

要停止间隔,请使用clearInterval()

示例:

var x = 2,
    y = 10;
var loop = setInterval(function(){ 
    if(x<y) {
        x = x+2;
        y++;
    } else {
        clearInterval(loop);
    }
}, 500);

答案 1 :(得分:0)

如果你期望在每次迭代中x = x + 2; y = y + 1;x >= y,那么你可以这样做:

&#13;
&#13;
var x = 2;
var y = 10;
var func = function() {
  // While x is still smaller than y
  if (x < y) {
    x = x + 2;
    y = y + 1;
    console.log(x, y);
 
    // Register a timer to call self after 500ms if we still to loop.
    setTimeout(func, 500);
  }
};

// Manually start the function.
func();
&#13;
&#13;
&#13;

setTimeoutsetInterval之间的差异是:

您需要在回调中调用setTimeout以使其保持循环,直到它达到停止条件为止。虽然setInterval只需拨打一次电话,但您可能必须使用clearInterval来停止拨打callback