如何继续检查 JavaScript 函数是否可用,然后在可用时调用

How to keep checking if JavaScript function is available, then call once available

我的项目由几个文件组成。我有一个 JavaScript 函数,window.toggleLayer() 在 second.js 的 dojo require 块中定义,我的主要 jQuery 位于 first.js。由于使用 dojo 和 jQuery 以及其他原因,我必须将代码分开。因此,我无法移动我的代码来防止我遇到的问题。

当页面加载时,first.js 加载(在此处调用函数),然后 second.js(函数存在的地方)加载。

当时我需要在 first.js 中调用 window.toggleLayer(),它不可用,我最终得到以下错误:

TypeError: window.toggleLayer is not a function
window.toggleLayer(pKey, true);

在最终弄清楚问题是时间问题后,我最终做了什么,我在函数周围设置了 setTimout:

setTimeout(function () {
    if(typeof window.toggleLayer == 'function'){
        window.toggleLayer(pKey, true);
    }
}, 1000);

函数现在在 1 秒后加载。但随着我的项目变得越来越重,1 秒很可能会改变。我可以将此值更改为 2500 或更高,但这似乎效率很低。

有没有办法动态地检查函数是否存在?并且如果存在就停止检查是否存在然后调用它?

试试这个:

function tryToggleLayer(){
  if(window.toggleLayer){ // check if function exists
     
    // If function exists, call it
    window.toggleLayer(pKey, true);
  }else{
    
    // If not, try again in one second
    setTimeout(tryToggleLayer, 1000);
  }
}

tryToggleLayer();

这样你就可以每隔一秒检查函数是否就绪,使用递归