有没有办法检查函数当前是否正在jQuery中运行?
我有一个文档,它可以让用户多次运行同一个函数。在我再次激活该功能之前,是否有办法检查该功能当前是否正在运行?这很简单。该函数未运行 Javascript完全是单线程的。如果浏览器响应任何用户事件,则表示当前没有运行任何功能。设置外部标志有没有办法检查函数当前是否正在jQuery中运行?,jquery,Jquery,我有一个文档,它可以让用户多次运行同一个函数。在我再次激活该功能之前,是否有办法检查该功能当前是否正在运行?这很简单。该函数未运行 Javascript完全是单线程的。如果浏览器响应任何用户事件,则表示当前没有运行任何功能。设置外部标志 var functionIsRunning = false; function myFunction() { if (!functionIsRunning) { functionIsRunning = true; //d
var functionIsRunning = false;
function myFunction() {
if (!functionIsRunning) {
functionIsRunning = true;
//do stuff
functionIsRunning = false;
}
}
同样的原则也适用于jQuery函数。如果您调用了很多函数,那么有很多实用程序可以帮助您管理这个签出承诺
您可以设置一个标志。大概是这样的:
(function () {
// your application within a closure to not pollute global scope
var handlerRunning = false;
// the function that will be called and shouldn't be running twice
var handler = function () {
if (handlerRunning) return;
handlerRunning = true;
// do stuff here
// when you're done, set handlerRunning to false
handlerRunning = false;
}
// assign your code to event handler for example
document.getElementById('awesome-button').addEventListener('click', handler, false);
}());
我不知道,但是你可以用一个变量来设置一个函数是否正在执行。比如:
function MyWrapper() {
this.running = false;
this.run = function() {
if (this.running==false) {
this.running = true;
// do something
this.running = false;
return true;
}
else {
return false;
}
};
}
使用
如果将单个延迟对象传递给jQuery.when
,则该方法将返回其承诺对象(延迟方法的子集)。可以调用Promise对象的其他方法来附加回调,例如。当延迟被解析或拒绝时,通常由最初创建延迟的代码来解析或拒绝,将调用相应的回调。例如,jQuery.ajax()
返回的jqXHR对象是一个承诺,可以这样使用:
很晚才回复,但我还是想在这里注册我的答案。 我遇到了一个类似的问题,其中嵌入了
setInterval
的后台服务器检查功能。但是,在我的代码中也有很多可能在其他条件下触发相同的函数。因此,为了确保我没有调用它,我只使用了本地存储来确保函数不会被反复调用
这个函数在我的HTML文件中
function serverCheck(value){
localStorage.setItem("isFunctionRunning",1);
setInterval(checkServerStatus, value);
}
下面的代码片段在我的另一个JS文件中
function xyz(){
//someCode
var checkFunction = localStorage.getItem("isFunctionRunning");
if(checkFunction != 1){
serverCheck(frequency);
}
}
虽然这是真的,但您可能只希望在前一个代码完成运行后对调用进行排队。特别是,如果在第一种情况下使用计时器,没有预防措施,动画会堆积起来(我知道jQuery的助手“停止”功能,jQuery通常允许您与动画交互,这只是涉及计时器的一个例子)。@gryzzly:这是完全不同的。如果正在等待动画结束,则不是检查函数当前是否正在运行,而是等待计时器中运行的代码达到特定状态。
function xyz(){
//someCode
var checkFunction = localStorage.getItem("isFunctionRunning");
if(checkFunction != 1){
serverCheck(frequency);
}
}