SetInterval

时间:2016-05-05 02:32:26

标签: javascript jquery setinterval

我有这个功能。目的是在调用另一个函数之前等待外部状态结束。

var renderEditClickWrapper = function( event )
{
    var wait = false;
    function waitForSavingDone(){
        if (options.dataStatusHandler.getStatus() == 'saving'){
            wait = setInterval( function(){
                waitForSavingDone();
            }, 800);
        }else{
            wait = false;
            call.renderEdit(event.data.name, event.data.rowId, event.data.parentId, event.data.options );
        }
    }

    if (!wait) waitForSavingDone();

    return false;
};

这样可行,但是当函数等待一次时,会反复调用该函数。

我也在使用jQuery。

知道我做错了吗?

2 个答案:

答案 0 :(得分:1)

您可以尝试以下另一种选择: 定义等待函数如下:

 function wait(waitComplete, onWaitComplete){

    if (waitComplete()) {
       onWaitComplete();
       return true;
    }

    setTimeout(function(){
        console.log('waiting...');
        wait(waitComplete, onWaitComplete);
    }, 800);

    return false;        
} 

事件处理程序可以使用wait,如下所示:

var renderEditClickWrapper = function( event )
{
   function isWaitComplete() { 
    return (options.dataStatusHandler.getStatus() != 'saving');
   }

   function onWaitComplete() {
     call.renderEdit(event.data.name, event.data.rowId, 
                     event.data.parentId, event.data.options);

   }
    wait(isWaitComplete, onWaitComplete);
 };

答案 1 :(得分:0)

尝试使用clearInterval()方法取消间隔功能,而不是wait = false。而且你也误解了区间函数的用法。如下所示:

var renderEditClickWrapper = function( event )
{

  function waitForSavingDone() {
    if (options.dataStatusHandler.getStatus() !== 'saving') {
      clearInterval(wait);
    }
  }

  var wait = setInterval(waitForSavingDone, 800);

  return false;
};

您应该检查注释中提到的回调函数。如果您使用回调,则会更推荐它。