javascript - 如何不断检查 JavaScript 函数是否可用,然后在可用时调用

标签 javascript jquery dojo

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

页面加载时,first.js 加载(在此处调用该函数),然后加载 secondary.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();

这样你就可以使用递归每秒检查函数是否准备好

关于javascript - 如何不断检查 JavaScript 函数是否可用,然后在可用时调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36843056/

相关文章:

jquery - 获取 jquery ui 按钮集中当前选定的单选按钮,无需绑定(bind)单击

javascript - 单击时,切换 Font Awesome 备忘单值

javascript - 如何在<div>标签内升级到dojo 1.10?

javascript - ArcGIS Javascript API 按钮单击不起作用

javascript - 如何替换 Dojo 中的 div?每次点击都会重复显示 div

javascript - Firebase 电话身份验证 : Is it possible to only check if the telephone exists in Authentication and not Sign Up the user automatically?

javascript - 交换不同大小的图像 [Javascript vs IE]

javascript - 如何在 Angularjs 中的 ng-show 之后操作 DOM?

Javascript:想要找到句子中以@开头的所有单词

javascript - HTML 表上的 .filter 不返回任何数据 - JavaScript