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

时间:2012-03-15 23:23:50

标签: jquery

我有一个文档可以让用户能够多次运行相同的功能。有没有办法检查函数当前是否正在运行,然后才能重新激活它?

7 个答案:

答案 0 :(得分:12)

设置外部标记。

var functionIsRunning = false;

function myFunction() {
    if (!functionIsRunning) {
        functionIsRunning = true;
        //do stuff
        functionIsRunning = false;
    }
}

同样的原则适用于jQuery函数。

答案 1 :(得分:8)

这很容易。该功能未运行。

Javascript严格单线程。如果浏览器响应任何用户事件,则当前没有正在运行的功能。

答案 2 :(得分:1)

如果您调用很多功能,那么有很多实用程序可以帮助您管理此功能,请查看Promise

http://api.jquery.com/promise/

答案 3 :(得分:0)

你可以设置一个标志。像这样:

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

}());

答案 4 :(得分:0)

不是我的头脑,但你可以使用变量来设置是否正在执行的函数。类似的东西:

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

答案 5 :(得分:0)

使用jQuery.when()

  

如果将单个Deferred传递给jQuery.when,则该方法将返回其Promise对象(Deferred方法的子集)。可以调用Promise对象的其他方法来附加回调,例如deferred.then。通过最初创建Deferred的代码解析或拒绝Deferred时,将调用相应的回调。例如,jQuery.ajax()返回的jqXHR对象是Promise,可以这样使用:

$.when( $.ajax( "test.aspx" ) ).then(function( data, textStatus, jqXHR ) {
   alert( jqXHR.status ); // Alerts 200
});

答案 6 :(得分:0)

迟到的回复,但我仍想在这里注明我的答案。 我遇到了一个类似的问题,我在其中嵌入了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);
   }
}