是否可以同步执行setTimeout()
或setInterval()
,以便依赖其回调的进一步执行不会导致not defined
错误?
intv = window.setInterval(function() {
// do some stuff
doSomeStuff();
// kill interval when stuff is done
if (stuffIsDone)
window.clearInterval(intv);
}, 10);
// dependent on "stuff" being done
// I want this to execute only after intv is cleared
doMoreStuff();
我不想将超时内的所有连续调用都检查if (typeof someStuff != 'undefined')
是的,我确实理解这会导致加载延迟并可能出现UI。间隔将非常小且无关紧要。
编辑... 好吧,我最终要做的是动态添加大量的javascript文件,只包含一个javascript文件。
即:
// auto include all javascript files
<script language="javascript" type="text/javascript" src="include.js"></script>
这可以通过AJAX从服务器请求JSON文件列表。它遍历列表并动态地将脚本添加到DOM中。
捕获:
如果我使用setInterval
添加脚本,有时会在 onLoad
事件触发后添加,具体取决于执行代码的计算机的当前计算负载。因此,当我从其中一个文件onLoad
调用函数时,它会导致错误(因为在执行时,该函数不存在)
如果我在while
循环内添加脚本,则动态添加的脚本不会执行,脚本之间的内部引用无效且出错。
所以,问题确实是:在每次调用时都不使用setInterval
和typeof
,如何可靠地动态添加脚本,以便相关代码不会尝试在加载依赖脚本之前执行?
答案 0 :(得分:1)
请查看Refactoring setInterval-based Polling并考虑将setInterval
转换为setTimeout
,并在doMoreStuff()
为真后使用承诺执行stuffIsDone
。
该文章来自2013年,因此请考虑使用Promises/A+(使用旧版浏览器的polyfill for ES6-style Promises代替jQuery或Underscore的实施。
答案 1 :(得分:-1)
如果要在一段固定的时间内阻止JavaScript线程,可以运行while
循环并跟踪系统时间。
例如:
var startMillis = Date.now();
while (Date.now() - startMillis < 10);
请注意,在此期间不会运行其他代码。 JavaScript是单线程的。
不知道你到底想要做什么,但这看起来有点奇怪:)