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

时间:2013-02-06 23:17:12

标签: javascript settimeout

quickstart guide for the Google Drive API中,一旦加载了客户端库,就会调用以下函数:

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

以{1}}延迟调用setTimeout的目的是什么,而不是立即调用checkAuth

3 个答案:

答案 0 :(得分:10)

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

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

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

//alerts "Hello" then "World"

我想简单地回答一下问题,如果你感兴趣的话,有更多关于setTimeout在the MDN article about it

中如何运作的细节

答案 1 :(得分:7)

通过使用setTimeout,您可以在checkAuth功能完成之前使页面具有交互性。

基本上,您阻止checkAuth阻止该页面。

作为旁注,HTML5规范中指定的最小延迟是5ms,因此等待1ms实际上是等待5ms。如果您回收该时间很重要,则可以使用window.postMessage以0ms延迟获得相同的结果。这最初设计用于处理跨域通信,但有a similar effect as setting a timeout with 0ms(您无法做到这一点,因为浏览器只允许5毫秒 - 或者在某些旧版浏览器中为10毫秒)。

最后,时间不保证。 JavaScript在一个线程上运行,所以当你把一些东西推到一个计时器上时,它必须等待执行其余部分的开放,然后再转向线程 - 它不会运行平行。

答案 2 :(得分: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秒后看到警报。