10

Google Drive API 的快速入门指南中,加载客户端库后会调用以下函数:

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

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

4

3 回答 3

10

Javascript 具有异步 I/O (ajax/requests) 以及setTimeoutand setInterval,

以 1 毫秒(或 0)运行的一种用途setTimeout是告诉该代码在其后的同步代码之后运行。这是一个例子

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

//alerts "Hello" then "World"

我想让我的回答简单明了,如果您有兴趣,可以在MDN 文章中详细了解 setTimeout 的工作原理

于 2013-02-06T23:20:19.800 回答
7

通过使用,您允许页面在功能完成setTimeout之前进行交互。checkAuth

从本质上讲,您是在阻止checkAuth页面暂停。

作为旁注,HTML5 规范中指定的最小延迟是 5 毫秒,因此 1 毫秒的等待实际上是 5 毫秒的等待。如果回收该时间对您很重要,您可以使用 0ms 延迟获得相同的结果window.postMessage。这最初是为处理跨域通信而设计的,但与将超时设置为 0ms 具有类似的效果(您不能这样做,因为浏览器只允许 5ms - 或在某些较旧的浏览器中允许 10ms)。

最后,时间不能保证。JavaScript 在单个线程上运行,因此当您将某些内容推送到计时器上时,它必须等待 JavaScript 其余部分的执行打开,然后才能轮到线程上运行——它不会并行运行。

于 2013-02-06T23:20:59.127 回答
2

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 秒后看到警报。

于 2013-02-06T23:22:27.010 回答