同步窗口.设置超时回调
Synchronize window.setTimeout callback
setTimeout(function() {
console.log("1");
}
console.log("2");
基本上,我想在"1"之前输出"2"。如何将回调函数与当前"调用方"线程同步?
你不能在 JavaScript 中支撑线程(除了 alert
和 confirm
内置(,所以在console.log("1")
之后实现console.log("2")
的唯一方法是:
-
把它放在超时函数中:
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 运行你的 ajax 完成回调,而你有一个函数在等待alert
;奇怪但真实,没有什么可以依赖跨浏览器甚至跨版本(,你不能暂停一个 JavaScript 函数的轨道,而另一个 JavaScript 函数运行。
尝试类似操作:
setTimeout(function() {
console.log("1");
callback();
}
function callback(){
console.log("2");
}
相关文章:
- 在promise中为回调添加超时并拒绝
- 可以clearTimeout删除JavaScript中已触发超时事件的未处理回调
- jasmine 2-在jasmine指定的超时时间内未调用异步回调.DEFAULT_TIMEOUT_INTERVAL
- Sinon-带有回调的存根函数-导致测试方法超时
- 节点.js设置超时与回调
- for循环,回调,一起超时,超时似乎不起作用
- 设置超时函数回调静态变量
- 定义节点.js回调的超时
- 量角器根据条件单击嵌套元素,错误 - 在指定的超时内未调用异步回调
- 同步窗口.设置超时回调
- 如何使用角度休息服务设置超时回调事件
- Response.重定向不能在会话超时的页面回调中调用
- 为什么设置超时's回调参数可以接受参数
- Mocha在运行CasperJS测试时不考虑超时或回调
- 由于回调结构中可能存在错误,无法使超时工作
- Jasmine异步回调超时
- 测试socket.on('data')回调,而不会让摩卡超时
- Protractor/Jasmine2 -未在指定超时内调用异步回调
- 为node.js回调实现超时
- 回调超时