延迟1调用setTimeout的目的是什么

What is the purpose of calling setTimeout with a delay of 1?

本文关键字:是什么 setTimeout 调用 延迟      更新时间:2023-09-26

在Google Drive API的快速启动指南中,加载客户端库后将调用以下函数:

// Called when the client library is loaded to start the auth flow.
function handleClientLoad() {
    window.setTimeout(checkAuth, 1);
}

像这样延迟1调用setTimeout而不是立即调用checkAuth的目的是什么?

Javascript具有异步I/O(ajax/请求)以及setTimeoutsetInterval

用1毫秒(或0)运行setTimeout的一个用途是告诉代码在之后运行,然后是它后面的同步代码

setTimeout(function(){
     alert("World");
},1); 
alert("Hello");
//alerts "Hello" then "World"

我想让我的答案简单明了,如果你感兴趣的话,在MDN关于setTimeout的文章中有更多关于它如何工作的细节

通过使用setTimeout,您可以在checkAuth函数完成之前让页面进行交互。

从本质上讲,您是在防止checkAuth占用页面。

附带说明一下,HTML5规范中指定的最小延迟是5ms,因此1ms的等待实际上就是5ms的等待。如果回收时间对您来说很重要,那么使用window.postMessage可以在0ms延迟的情况下获得相同的结果。这最初是为了处理跨源通信而设计的,但其效果与设置0ms的超时类似(在一些较旧的浏览器中,浏览器只允许5ms或10ms,因此无法做到这一点)。

最后,时间没有保证。JavaScript在一个线程上运行,所以当你把一些东西推到计时器上时,它必须等待JavaScript其余部分的执行打开,然后才能在线程上运行——它不是并行运行的。

setTimeout(function, 1)将使function在当前执行线程完成后运行。浏览器窗口中的JavaScript在单个线程中运行。因此,即使超时为1,它也要等到当前执行结束后才能运行。例如,考虑以下脚本:

window.setTimeout(checkAuth, 1);
// long code that takes 5 seconds to complete

function checkAuth() {
    alert("i m here!");
}

在上面的示例中,您将在5秒钟后看到警报。