JavaScript: остановить выполнение функции из другой функции

есть ли способ, чтобы остановить выполнение вызываемой функции из другой функции?

У меня есть следующий код:-

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>

Итак, основная идея-вернуться; функция из другой функции

3 ответов


JavaScript обычно однопоточный-это означает, что в то время как функция выполняется в браузере, никакой другой код не может выполняться одновременно, включая обработчики событий, такие как onclick (они будут запускаться только после завершения функции). Таким образом, в этом случае вы не можете прервать выполнение функции из кода.

есть два workounds:

  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. использовать веб-работников. Они позволяют запускать код параллельно, но имеют некоторые ограничения и не поддерживаются всеми браузерами.


вы можете передать аргумент, например cancel, всякий раз, когда вы вызываете 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>

Я думаю, что вы пытаетесь остановить выполнение другого вызова функции из функции. если да, то вам нужно поместить вызываемую функцию в условие, чтобы вы могли контролировать выполнение.

Если мое понимание неверно, пожалуйста, уточните, что вы хотите сделать, почему люди хотят остановить выполнение функции.