gpt4 book ai didi

javascript - 暂停设置间隔

转载 作者:行者123 更新时间:2023-11-30 18:46:00 24 4
gpt4 key购买 nike

我使用 setInterval 每隔几秒运行一个函数(执行 AJAX 操作)。但是我还有一个其他函数也在调用它。

setInterval(myFunc(), 5000);
function buttonClick() {
// do some stuff
myFunc();
}

大部分时间它都能正常工作,但有时会同时调用该函数两次,导致两次收到完全相同的结果,这是我不希望看到的。

我想我必须使用 clearTimeout:

var interval = setInterval(myFunc(), 5000);
function buttonClick() {
clearTImeout(interval);
// do some stuff
myFunc();
interval = setInterval(myFunc(), 5000);
}

然而,这会导致函数停止。由于它是从其他函数调用的,因此某些代码永远不会执行。我怎样才能避免这种情况?

最佳答案

however sometimes this function gets called twice at the same time resulting in receiving exactly the same result twice, something I don't want.

浏览器上的 JavaScript 是单线程的(除非使用新的 web workers 东西,但这无论如何都不适用于这里)。您的函数在运行时永远不会被调用。 (但更多内容在下方。)

在您的各种代码引用中,您正在调用 myFunc,您的意思是只是引用它。例如:

var interval = setInterval(myFunc(), 5000);

应该是

var interval = setInterval(myFunc, 5000);
// ^--- No parentheses

如果您更正该代码,取消超时的代码将起作用:

var interval = setInterval(myFunc, 5000);
function buttonClick() {
clearTImeout(interval);
// do some stuff
myFunc();
interval = setInterval(myFunc, 5000);
}

但没有理由这样做,myFunc 无论如何都无法在运行时被调用。

如果 myFunc 触发将异步完成的操作(例如 ajax 调用),上述不会有帮助(对于myFunc 将启动进程然后返回的简单原因;进程将单独完成)。在这种情况下,最好的办法是让 myFunc 自行安排下一次调用:

function myFunc() {
// Do my work...

// Schedule my next run
setTimeout(myFunc, 5000);
}

...并且根本不使用 setInterval

关于javascript - 暂停设置间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5463986/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com