setTimeout(function() {
console.log("1");
}
console.log("2");
基本上,我想在“2”之前输出“1”。如何将回调函数与当前的“调用者”线程同步?
setTimeout(function() {
console.log("1");
}
console.log("2");
基本上,我想在“2”之前输出“1”。如何将回调函数与当前的“调用者”线程同步?
尝试类似:
setTimeout(function() {
console.log("1");
callback();
}
function callback(){
console.log("2");
}
你不能在 JavaScript 中阻止线程(除了alert
和confirm
内置),所以在你console.log("2")
之后实现你的唯一方法console.log("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
你在日程安排上不会有一点混乱的时间要长得多。
注意我在上面说的是“线程”。除非您使用具有特定语法的网络工作者,否则浏览器上的 JavaScript 是单线程的。两个 JavaScript 函数不能同时运行,除了边缘情况下的浏览器错误alert
和 ajax 完成等(至少某些版本的 Firefox 会在您等待函数时运行您的 ajax 完成回调alert
;奇怪但真实,没有什么可以依赖的在跨浏览器甚至跨版本上),您不能在运行另一个 JavaScript 函数时暂停一个 JavaScript 函数。