JavaScript - 如何创建一次只能运行一次的函数?

时间:2014-10-30 12:16:25

标签: javascript

假设我有这个简单的JavaScript函数:

var exclusiveFunction = function(){
    for(index in firstArray)
    {
        for(secondIndex in firstArray[index])
        {
            // do stuff to firstArray[index][secondIndex]
        }
    }
}

我的问题:在一个调用完成整个函数之前,有可能多次调用此代码。我想要的是什么:

 if(exclusiveFunction.workingAtTheMoment)
 {
      exclusiveFunction.stopFunction();
      exclusiveFunction();  
 } 

基本上,检查函数是否正在运行,如果是,则暂停它(以及它的每个实例都在运行),然后重新启动它。这可能吗?

3 个答案:

答案 0 :(得分:0)

JavaScripts是单线程的,应该使用回调来提供异步行为。您的函数没有任何回调。因为它以你想要的方式工作..

答案 1 :(得分:0)

您可以使用varible来跟踪功能超越

var isFunRunning =0;

var exclusiveFunction = function(){
if(isFunRunning==0)
{    
    isFunRunning =1;    
    for(index in firstArray)
        {
            for(secondIndex in firstArray[index])
            {
                // do stuff to firstArray[index][secondIndex]
            }
        }
    isFunRunning=0;
}
else {  

//code to keep count of function triggered in between

 }
        }

或者通过这个 http://api.jquery.com/jquery.callbacks/

OR __________________________________________________________________-

var callbacks = $.Callbacks();
var count =0;

 var exclusiveFunction = function(){

  if(isFunRunning==0)
    {    
        isFunRunning =1;    
        for(index in firstArray)
            {
                for(secondIndex in firstArray[index])
                {
                    // do stuff to firstArray[index][secondIndex]
                }
            }
        isFunRunning=0;
    }
    else {  

        callbacks.add( exclusiveFunction );
        count ++;

     }
            }

然后触发回调

答案 2 :(得分:0)

我不确定是否有可能创建并行函数(可能是事件或异步;我对这个想法不感兴趣),但你可以停止这样的功能:

window.someCounter = 0;
function doSomethingUntilOtherCall(){
    var myID = ++window.someCounter;
    while (myID === window.someCounter){
        // do something
    }
}