setTimeout(function() {
console.log("1");
}
console.log("2");
基本上,我想在“2”之前输出“1”。如何将回调函数与当前“调用者”线程同步?
答案 0 :(得分:3)
尝试类似:
setTimeout(function() {
console.log("1");
callback();
}
function callback(){
console.log("2");
}
答案 1 :(得分:3)
你不能用JavaScript(alert
和confirm
内置插件除外)来阻止该线程,因此console.log("2")
只能在你的{console.log("1")
之后发生1}}是:
将其置于超时功能中:
setTimeout(function() {
console.log("1");
console.log("2");
}, delay);
...或者在超时函数调用的另一个函数中,虽然你已经有了setTimeout
的函数,但是不清楚(代码组织除外)为什么你需要一个单独的函数。
将它放在一个单独的函数中,然后传递给setTimeout
,延迟时间更长:
setTimeout(function() {
console.log("1");
}, delay);
setTimeout(function() {
console.log("2");
}, longerDelay);
...请注意,longerDelay
确实比delay
足够长,以至于您不会因调度而陷入混乱。
注意我说上面的“线程”。除非您使用具有特定语法的web workers,否则浏览器上的JavaScript 单线程。两个JavaScript函数不能同时运行,除了alert
和ajax完成之类的边缘案例浏览器错误之外(至少某些版本的Firefox在alert
等待函数时运行你的ajax完成回调;奇怪但真实,没有任何东西可以依赖跨浏览器甚至跨版本),当另一个JavaScript函数运行时,你不能在其轨道中暂停一个JavaScript函数。