我的项目包含多个文件。我有一个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或更高,但这似乎效率很低。
如果函数存在,有没有办法动态检查?如果它存在,停止检查它是否存在然后调用它?
答案 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();

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