如何在JavaScript中暂停一个函数?

时间:2014-10-19 02:30:20

标签: javascript settimeout cleartimeout

我在JavaScript中有很长的功能,我会在某些时候暂停它。我知道我可以使用setTimeout(myFunction, 100)clearTimeout()来做到这一点。但是,据我所知,在使用setTimeout(myFunction, 100)之后,我的函数将在100毫秒之后从其第一行执行,此后每100毫秒执行一次。我想知道我是否可以在第50行暂停我的功能,然后在这行51之后立即恢复。这可能吗?

2 个答案:

答案 0 :(得分:2)

这是一种方法。确保您需要的所有变量始终作为范围在外部函数中声明。由于Javascript范围规则,它们将在每个子功能中可访问。

function paused() {
  // Define variables you'll need throughout the function.
  var var1, var2, var3;

  // First part of the function
  function part1() {
    // 50 lines
  }

  // Second part of the function
  function part2() {
    // 50 lines
  }

  setTimeout(part1, 0);
  setTimeout(part2, 100);
}

假设有很多部分,超时甚至可以进入循环:

function paused() {
  // Define variables you'll need throughout the function.
  var var1, var2, var3;

  // All function parts.
  var parts = [
    function() {
      // 50 lines
    },
    function() {
      // 50 lines
    },
    function() {
      // 50 lines
    }
    // More?
  ];

  for (var i = 0; i < parts.length; i++) {
    setTimeout(parts[i], i * 100);
  }
}

确保谨慎使用this,因为内部函数会重新绑定它。

请注意,由于Javascript事件队列的工作方式,全局函数将始终按顺序执行暂停的部分,而不管每个部分是否超过100毫秒。当事件队列看到多个setTimeout同时有资格执行时,首先排队的那个优先。

答案 1 :(得分:0)

您让setTimeoutsetInterval感到困惑。

然而,这完全不可能。

相反,您需要将其分解为两个函数,并使用setTimeout从第一个调用第二个函数。

根据您实际尝试做的事情,承诺可能会有所帮助。