JavaScript:停止从另一个函数执行函数

时间:2015-03-19 16:06:15

标签: function javascript-events

有没有办法停止从另一个函数执行被调用的函数?

我有以下代码: -

function MainFuntion() { //a long code that runs for few time  };
MainFuntion();

<button onclick="(here i want some thing to stop MainFunction())">Stop the running script </button>

所以基本的想法是回归;来自另一个函数的函数

5 个答案:

答案 0 :(得分:9)

JavaScript通常是单线程的 - 这意味着当在浏览器中执行函数时,其他代码不能同时运行 - 包括onclick等事件处理程序(只有在函数完成后才会触发它们) )。因此,在这种情况下,您无法从代码中断函数的执行。

有两个问题:

  1. 长时间运行的功能可能会故意中断,允许其他代码执行。

    //set this to true from an event handler to stop the execution
    var cancelled = false;
    
    function longRunningFunction() {
      if (cancelled) {
        return;
      } 
    
      // do some work, but not all
      // save your progress to be able to resume when called again
    
      if (!done) {
        // release control, so that handlers can be called, and continue in 10ms
        setTimeout(longRunningFunction, 10);
      }
    }
    
  2. 使用web workers。它们允许并行运行代码,但有一些限制,并不是所有浏览器都支持。

答案 1 :(得分:1)

每当调用MainFunction时,都可以传递一个参数,比如cancel。因此,如果你想要启动函数,你传入一个参数'0',如果你想让它停止,你可以用一个不是'0'的争论再次调用该函数,比如'1'。这是一个有效的例子:

function MainFunction(cancel) {
var yourcode;
  if (cancel == 0) {
    yourCode = setInterval(function() {
      //Put your code here, this is an example:
      document.getElementById('div').style.color = "red";
    }, 1);
  }
  if (cancel == 1) {
    clearInterval(yourCode);
    document.getElementById('div').style.color = "black";
  }
}
<html>
  <head>
    <title>My website</title>
  </head>
  <body>
    <button id="btn" onclick="MainFunction(0)">Start</button>
    <button onclick="MainFunction(1)">Stop</button>
    <div id="div">This division can change colour</div>
  </body>
</html>

答案 2 :(得分:0)

我认为你试图阻止从函数执行其他函数调用。如果是,那么你需要将被调用的函数放在条件中,以便你可以控制执行。

如果我的理解不正确,请详细说明你想做什么,为什么要停止执行该功能。

答案 3 :(得分:0)

public static int solution(int N) {

        int count = 0;

        for (int i = 1; (i * i) <= N; i++) {

            if (i * i == N) {
                count++;

                return count;
            }

            if (N % i == 0) {
                count += 2;
            }
        }

        return count;
    }
Integer.MAX_VALUE

答案 4 :(得分:0)

您可以使用 clearTimeoutsomething.onclick('timeout()') something.onclik('myStopFunction()') var myVar; function timeout() { myVar = setTimeout(()=>{MainFuntion(); }, 3000); } function myStopFunction() { clearTimeout(myVar); }

melt()

有关详细信息,请查看此链接 https://www.w3schools.com/jsref/met_win_cleartimeout.asp