Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法检查函数当前是否正在jQuery中运行?_Jquery - Fatal编程技术网

有没有办法检查函数当前是否正在jQuery中运行?

有没有办法检查函数当前是否正在jQuery中运行?,jquery,Jquery,我有一个文档,它可以让用户多次运行同一个函数。在我再次激活该功能之前,是否有办法检查该功能当前是否正在运行?这很简单。该函数未运行 Javascript完全是单线程的。如果浏览器响应任何用户事件,则表示当前没有运行任何功能。设置外部标志 var functionIsRunning = false; function myFunction() { if (!functionIsRunning) { functionIsRunning = true; //d

我有一个文档,它可以让用户多次运行同一个函数。在我再次激活该功能之前,是否有办法检查该功能当前是否正在运行?

这很简单。该函数未运行

Javascript完全是单线程的。如果浏览器响应任何用户事件,则表示当前没有运行任何功能。

设置外部标志

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);
   }
}