我需要回答的关于 setTimeout 的问题
Question about setTimeout that I need answer to
所以我们都知道 setTimeout 在执行某些事情之前会等待一定的时间。我的问题是,它是先等待上面的代码执行完,再等一秒钟再执行其他事情,还是只等一秒钟,不管上面的代码是否执行完,它都会执行剩下的代码还在吗?
if (1 == 1) {
//huge chunk of code
} //end of if (1 == 1)
var theTime = 1000;
var timeout = setTimeout("location.reload(true);", theTime);
function resetTimeout() {
clearTimeout(timeout);
timeout = setTimeout("location.reload(true);", theTime);
} //end of function resetTimeout()
我的目标是让第一部分代码执行完毕,然后在第一部分代码执行完毕后立即刷新页面。有办法吗?
如果您将超时设置为非常小的值(例如 1 毫秒,甚至可能为零,但尚未检查),它会在您的主代码完成后立即执行。它不会在您的主要代码完成之前执行,因为 JavaScript 不是多线程的。
在您的情况下,页面将在 setTimeout
调用 1 秒后重新加载。所以是 "huge chunk of code" 时间加 1 秒。
要在代码的第一部分完成后立即刷新页面,只需调用 location.reload
而无需 setTimeout
:
if (1) {
//huge chunk of code
}
location.reload(true);
编辑:这种方法不等待异步代码完成。例如下面的程序在弹出警告框之前被重新加载中断了。
if (1) {
setTimeout(() => alert('Test'), 1000);
}
location.reload(true);
JavaScript 是单线程和非抢占式的,不可能中断 运行ning 的代码。异步代码,比如超时和AJAX回调,不能运行直到当前正在执行的代码returns到主事件循环。
setTimeout
中的计时器在调用时立即启动。但是因为单线程的设计,回调只能等到你当前的JS全部执行完才能调用。如果这花费的时间比计时器长,则回调将被延迟。因此,您可以保证的是回调将至少在该时间段内被调用——它可能更长,但不会更短。事件队列中也可能有其他异步回调。
所以我们都知道 setTimeout 在执行某些事情之前会等待一定的时间。我的问题是,它是先等待上面的代码执行完,再等一秒钟再执行其他事情,还是只等一秒钟,不管上面的代码是否执行完,它都会执行剩下的代码还在吗?
if (1 == 1) {
//huge chunk of code
} //end of if (1 == 1)
var theTime = 1000;
var timeout = setTimeout("location.reload(true);", theTime);
function resetTimeout() {
clearTimeout(timeout);
timeout = setTimeout("location.reload(true);", theTime);
} //end of function resetTimeout()
我的目标是让第一部分代码执行完毕,然后在第一部分代码执行完毕后立即刷新页面。有办法吗?
如果您将超时设置为非常小的值(例如 1 毫秒,甚至可能为零,但尚未检查),它会在您的主代码完成后立即执行。它不会在您的主要代码完成之前执行,因为 JavaScript 不是多线程的。
在您的情况下,页面将在 setTimeout
调用 1 秒后重新加载。所以是 "huge chunk of code" 时间加 1 秒。
要在代码的第一部分完成后立即刷新页面,只需调用 location.reload
而无需 setTimeout
:
if (1) {
//huge chunk of code
}
location.reload(true);
编辑:这种方法不等待异步代码完成。例如下面的程序在弹出警告框之前被重新加载中断了。
if (1) {
setTimeout(() => alert('Test'), 1000);
}
location.reload(true);
JavaScript 是单线程和非抢占式的,不可能中断 运行ning 的代码。异步代码,比如超时和AJAX回调,不能运行直到当前正在执行的代码returns到主事件循环。
setTimeout
中的计时器在调用时立即启动。但是因为单线程的设计,回调只能等到你当前的JS全部执行完才能调用。如果这花费的时间比计时器长,则回调将被延迟。因此,您可以保证的是回调将至少在该时间段内被调用——它可能更长,但不会更短。事件队列中也可能有其他异步回调。