有没有办法停止从另一个函数执行被调用的函数?
我有以下代码: -
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>
所以基本的想法是回归;来自另一个函数的函数
答案 0 :(得分:9)
JavaScript通常是单线程的 - 这意味着当在浏览器中执行函数时,其他代码不能同时运行 - 包括onclick
等事件处理程序(只有在函数完成后才会触发它们) )。因此,在这种情况下,您无法从代码中断函数的执行。
有两个问题:
长时间运行的功能可能会故意中断,允许其他代码执行。
//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);
}
}
使用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)
您可以使用 clearTimeout
和 something.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