只有在 3 秒内未执行代码时才执行块

Execute a block only when a code has not been executed in 3 seconds

如果 3 seconds 已通过并且 angular.bootstrap()block 1 尚未完成,但前提是。

我有两段代码:

// block 1:
Office.initialize = function (reason) {
    $(document).ready(function () {
        angular.bootstrap(document, ['myApp'])
    })
}

// block 2:
$(document).ready(function () {
    angular.bootstrap(document, ['myApp'])
})

有人知道怎么做吗?

编辑 1: 只是为了澄清 Office.initialize 可能永远不会执行(即,当应用程序作为加载项加载到 Office 中时) .在这种情况下,我还是想在3秒内执行完block 2angular.bootstrap

您可以在 JavaScript 中使用 setTimeout()clearTimeout() 函数。

函数用法:

设置超时:

setTimeout(function, time);`
//function is the function to execute
//time is the duration to wait (in milisecods) before executing the function

清除超时:

clearTimeout(id);`
//id is the id of the setTimeout block to stop from executing

这是将函数实现到代码中的方式:

// block 1:
var wait = setTimeout(myFunction, 3000);
Office.initialize = function (reason) {
  $(document).ready(function () {
      angular.element(document).ready(function () {
          angular.bootstrap(document, ['myApp'])
          clearTimeout(wait);
      })
  })
}

// block 2:
function myFunction() {
  angular.element(document).ready(function () {
      angular.bootstrap(document, ['myApp'])
}

此解决方案使用 underscorejs once 函数。写一个函数,比如,

var bootstrapInit = _.once(function(){
angular.bootstrap(document, ['myApp']);
});

现在,您可以在块 1、块 2 和 setTimeout 中调用此函数,时间为 3 秒。无论哪个先调用它都将执行该函数,其余调用将是虚拟调用。