Javascript 异步运行setTimeout()或setInterval()

Javascript 异步运行setTimeout()或setInterval(),javascript,synchronous,Javascript,Synchronous,是否可以同步执行setTimeout()或setInterval(),以便依赖其回调的进一步执行不会导致未定义的错误 intv = window.setInterval(function() { // do some stuff doSomeStuff(); // kill interval when stuff is done if (stuffIsDone) window.clearInterval(intv); }, 10); // d

是否可以同步执行
setTimeout()
setInterval()
,以便依赖其回调的进一步执行不会导致
未定义的
错误

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();
我不想将每个连续调用都放在超时时间内,以检查是否(typeof something!=“undefined”)

是的,我知道这将导致加载延迟,并可能导致UI。间隔将非常小且无关紧要

编辑…好吧,我最终要做的是动态添加一些javascript文件,只包含一个javascript文件

即:

//自动包含所有javascript文件
其工作原理是通过AJAX从服务器请求javascript文件的JSON列表。它在列表中循环并将脚本动态添加到DOM中

捕获物:

如果我使用
setInterval
添加脚本,它们有时会在
onLoad
事件触发后添加,具体取决于执行代码的机器的当前计算负载。因此,当我从一个文件
onLoad
调用函数时,它会导致一个错误(因为在执行时,函数不存在)

如果在
while
循环中添加脚本,则动态添加的脚本不会执行,脚本之间的内部引用无效并出错


因此,真正的问题是:不在每次通话中使用
setInterval
typeof
,如何可靠地动态添加脚本,使依赖代码在加载依赖脚本之前不会尝试执行?

如果要在固定时间段内阻止JavaScript线程,可以运行
while
循环并跟踪系统时间

例如:

var startMillis = Date.now();
while (Date.now() - startMillis < 10);
var startMillis=Date.now();
while(Date.now()-startMillis<10);
请注意,在此期间不会运行其他代码。JavaScript是单线程的

不知道您到底想做什么,但这似乎有点奇怪:

< P>查看并考虑将您的<代码> SETIFATION <代码>转换为<代码> SETTIMEOUT 并使用承诺执行<代码> DOMRESUTFUFF()/<代码> >

这篇文章是从2013开始的,所以考虑(使用一个旧浏览器)代替jQuery或下划线的实现。< / P>不,它们不是如何工作的。是否有一个原因,你不能<代码> DOMRESUTFUF()/<代码>在<代码> CurrayStult<代码> >代码(如果(StudiScript)< /Cord> Bug?@ ArnouDuff:是的,这是我需要完成的一个非常简单的例子

domorseuff()
只是演示了将从其他脚本等调用的许多其他函数。噢,当然是
while
循环。我会尝试一下,然后再报告。这不是会让CPU以100%的速度旋转吗X@sleepycal,是的,但是没有办法按照OP的要求同步运行它。唯一的方法是旋转等待,这将在讨论中的10毫秒内使用100%的CPU。显然这有问题,但这是我所知道的回答这个问题的唯一方法。正如我所说,这是一个奇怪的问题,所以答案可能是重新思考这个问题,然后以不同的方式解决。它只会旋转一个CPU(或者更准确地说,一个线程)。JS是单线程的。
var startMillis = Date.now();
while (Date.now() - startMillis < 10);