停止 Javascript 另一个函数的函数执行

Stop Javascript Function execution from another Function

有什么方法可以停止从另一个函数执行被调用的函数吗?

我有以下代码:-

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

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

所以基本的想法是return一个函数来自另一个函数

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

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

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

有两种解决方法:

  1. 较长的 运行ning 函数可能会故意中断,从而允许执行其他代码。

    //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。它们允许 运行 并行执行代码,但有一些限制并且并非所有浏览器都支持。

您可以在调用 MainFunction 时传递一个参数,例如取消。所以,如果你想让函数开始,你传入一个参数“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>

您可以使用 setTimeoutclearTimeout

something.onclick('timeout()')

something.onclik('myStopFunction()')

var myVar;

function timeout() {
  myVar = setTimeout(()=>{MainFuntion(); }, 3000);
}

function myStopFunction() {
  clearTimeout(myVar);
}

有关更多信息,请查看此 link https://www.w3schools.com/jsref/met_win_cleartimeout.asp