我的项目由多个文件组成。我有一个 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/