如何继续检查JavaScript功能是否可用,然后调用一次

时间:2016-04-25 14:10:17

标签: javascript jquery dojo

我的项目包含多个文件。我有一个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或更高,但这似乎效率很低。

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

1 个答案:

答案 0 :(得分:2)

试试这个:



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();




这样你可以使用递归

检查函数是否每秒都准备就绪