【发布时间】:2015-02-12 10:43:53
【问题描述】:
我正在修复一个使用 setTimeout 通知后端保持会话活动的 Web 应用程序的问题。这在所有情况下都按预期工作,但以下情况除外:
当有背靠背同步 AJAX 帖子发生时,setTimeout 不会触发。
我了解 setTimeout 触发为 JavaScript is single-threaded 可能会有延迟,并且必须等待一项任务完成。
我的问题是:为什么 setTimeout 根本没有触发?为什么它在所有 AJAX 请求结束时触发,而不是在中间触发?
这是我的keepAlive函数
function keepAlive() {
var img = new Image(1, 1);
img.src = "google.com" + '?' + new Date();
timer = setTimeout(function () {
keepAlive();
}, 10000);
}
我在 jsfiddle 中为我的问题创建了一个快速而肮脏的 demo。
提前致谢!
【问题讨论】:
-
JavaScript 不是单线程的。 浏览器上的 JavaScript 有一个 主 UI 线程(以及任意数量的 Web 工作线程)。
-
谢谢@T.J.Crowder!我的立场是正确的:)
标签: javascript ajax settimeout