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:
-
длинняя идущая функция смогла принять перерывы преднамеренно, позволяющ другому коду к выполнять.
//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); } }
использовать веб-работников. Они позволяют запускать код параллельно, но имеют некоторые ограничения и не поддерживаются всеми браузерами.
вы можете передать аргумент, например 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>
Я думаю, что вы пытаетесь остановить выполнение другого вызова функции из функции. если да, то вам нужно поместить вызываемую функцию в условие, чтобы вы могли контролировать выполнение.
Если мое понимание неверно, пожалуйста, уточните, что вы хотите сделать, почему люди хотят остановить выполнение функции.