使用setTimeout进行回调超时的Javascript模式?

时间:2018-03-27 18:57:21

标签: javascript callback

在页面加载时,我设置了一些函数并调用了第一个应该逐步完成的函数。

after5Seconds();

function after5Seconds() {
  setTimeout(hideOne, 5000);
}
function hideOne() {
  $('.toggleme#one').fadeOut(showTwo);
}
function showTwo() {
  $('.toggleme#two').fadeIn('125', 'swing', startAllOver); 
}

我发现通常一些回调会停滞不前并且无声地失败,我开始更新每个回调更像是:

  • setTimeout在N毫秒内触发回调(如果尚未触发)

类似的东西:

  function wrapMeInDelay(fn, timer) {
    var hasBeenCalled = false;
    var ctx = function() {
      if (hasBeenCalled) {
        return false;
      } else {
        hasBeenCalled = true;
        return fn();
      }
    };
    setTimeout(ctx, timer);
    return ctx;
  }

基本上我想开始向回调添加超时,以确保在jquery /任何回调不首先触发它时调用它们。

还有另一种更常见的做法,我不知道吗?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,你只想在X秒后调用某个函数,只有在没有调用此函数的情况下?

var _timeout;
function onTrigger(){
  if (_timeout){
    clearTimeout(_timeout);
  };
  console.log("function triggered");
};
_timeout = setTimeout(onTrigger, 5000);
onTrigger();

您需要存储对该超时的变量引用,并且在调用函数时,删除该超时(clearTimeout)。在这种情况下,不会执行超时。